V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
XxxxD
V2EX  ›  Python

在服务器布置了 ss, request 使用代理不走本地代理服务器应该怎么写?

  •  
  •   XxxxD · 2019-03-10 15:07:02 +08:00 · 2258 次点击
    这是一个创建于 2084 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了 requests 的文档,http 和 socks, ss 应该属于 socks

    proxies = {
        'http': 'socks5://user:pass@host:port',
        'https': 'socks5://user:pass@host:port'
    }
    

    user 我用的 root:用的 ss 的密码 @host:port 失败 请教下应该怎么写,另外用的 google cloud VM 实例, 我竟然连 ssh 密码都没找到,搜了下好像只能添加密钥这样?

    41 条回复    2019-08-14 15:11:13 +08:00
    0yster
        1
    0yster  
       2019-03-10 19:38:39 +08:00 via iPhone
    同遇过这个问题,网上说最新的 requests 支持 socks5。但是我实测有问题,希望楼主解决了可以贴一下。
    Juszoe
        2
    Juszoe  
       2019-03-10 20:18:36 +08:00
    ss 应该只是用了 sock5,不代表用 sock5 能直接连上,还有一层 ss 协议(看了 ss 的描述,不是很肯定)
    可以服务器开个 sslocal 连上 ss,requests 连上 sock5://localhost:[sslocal 端口]
    arischow
        3
    arischow  
       2019-03-10 20:27:20 +08:00 via iPhone
    我记得是设环境变量 HTTP_PROXY
    ThirdFlame
        4
    ThirdFlame  
       2019-03-10 20:45:39 +08:00
    尤其 ss 客户端 生成的代理端口 也是 http 的。
    这个用 v2ray 来接入 $$ ,是可以生成 http 代理的。
    qf0129
        5
    qf0129  
       2019-03-10 20:50:34 +08:00 via iPhone
    用 proxychains 试下
    pengwen
        6
    pengwen  
       2019-03-10 22:03:26 +08:00 via Android
    你的 requests 不支持吧,试试这个
    pip install -U requests[socks]
    Acebiu
        7
    Acebiu  
       2019-03-10 22:05:23 +08:00
    想将 socks 转成 http 的话,你需要 polipo。
    wweir
        8
    wweir  
       2019-03-10 22:19:09 +08:00
    上 sower,智能全局代理,自动检测被屏蔽的站点,专业解决规则的烦恼
    github.com/wweir/sower
    Trim21
        9
    Trim21  
       2019-03-10 22:24:53 +08:00 via Android   ❤️ 1
    你不应该直接把 requests 当作一个 ss 客户端用,应该在本地开一个 ss 客户端连上服务器,然后用本地 ss 客户端暴露的那个代理地址。
    lovestudykid
        10
    lovestudykid  
       2019-03-10 22:25:57 +08:00 via iPhone
    ....这个问题难道不是开出来的代理端口并没有用户密码你不应该写吗?并且 socks5 和 http 都有提供的,并且端口相同
    Yourshell
        11
    Yourshell  
       2019-03-10 23:25:02 +08:00 via iPhone
    直接用 socks 的话那你 ss 客户端用来干嘛
    XxxxD
        12
    XxxxD  
    OP
       2019-03-11 08:25:02 +08:00
    @pengwen 谢谢,我是安装了这个的
    XxxxD
        13
    XxxxD  
    OP
       2019-03-11 08:26:48 +08:00
    @Acebiu 不是转 http, 只是想脚本直接连接服务器的布置的代理,不走本地端口
    XxxxD
        14
    XxxxD  
    OP
       2019-03-11 08:29:44 +08:00
    @Trim21 谢谢,我是一个脚本已经走了本地了,又在另外服务器布置了一个,需要脚本不走本地,因为走本地只有一个
    XxxxD
        15
    XxxxD  
    OP
       2019-03-11 08:30:37 +08:00
    @lovestudykid 谢谢,不设定用户名和密码我 http 和 socks5 都试过,连不了
    Trim21
        16
    Trim21  
       2019-03-11 08:46:37 +08:00 via Android
    @XxxxD 那你应该在另外的这台机子上再跑一个 ss 客户端…
    9527tech
        17
    9527tech  
       2019-03-11 08:48:13 +08:00 via iPhone
    proxies = {
    'http': 'socks5://127.0.0.1:1080'
    'https': 'socks5://127.0.0.1:1080'
    }

    这样应该就行
    ik
        18
    ik  
       2019-03-11 09:03:45 +08:00 via iPhone
    curl --socks xxx 先试试?
    XxxxD
        19
    XxxxD  
    OP
       2019-03-11 09:09:35 +08:00
    @Juszoe 你好,你这样也是走本地端口么?我是想脚本不走本地端口,直接走代理
    XxxxD
        20
    XxxxD  
    OP
       2019-03-11 09:10:50 +08:00
    @Trim21 我就是想把远程的 ss 布置成代理然后我就可以不用买代理了这样,没多的电脑可以使用,orz
    XxxxD
        21
    XxxxD  
    OP
       2019-03-11 09:11:09 +08:00
    @9527tech 谢谢,我就是不想走本地的,因为已经有个脚本走了本地了
    XxxxD
        22
    XxxxD  
    OP
       2019-03-11 09:12:13 +08:00
    @arischow 问题是代理都连不上,设环境变量是不是有点过早了
    Juszoe
        23
    Juszoe  
       2019-03-11 09:14:50 +08:00
    @XxxxD #19 这是最简便的办法,想脚本直接走的话只能把 ss 的 python api 拉过来,写在代码里面,我看你 14 楼说的,其实 ss 客户端本地端口可以允许多个连接的
    XxxxD
        24
    XxxxD  
    OP
       2019-03-11 09:39:37 +08:00
    @Juszoe 你好,你说的的多个连接是切换到另外一个代理么? 但是实际上我是不知了两个服务器的代理,一个本地走着,还有一个想脚本直接连,你说的是怎么多个连接呢?
    yzc27
        25
    yzc27  
       2019-03-11 09:50:52 +08:00 via iPhone
    遠程服務器架完 ss 服務端,再同時在台服務器架個 ss 客戶端,並對公網開個 socks 代理端口(似乎無密碼驗證),你自己電腦 requests 連那個端口就好啦(純拍腦袋想出來,沒驗證過)
    Juszoe
        26
    Juszoe  
       2019-03-11 09:52:47 +08:00
    @XxxxD #24 我略微有些混乱了,方便的话麻烦画个图,描述一下几台服务器(机器),分别部署了什么
    XxxxD
        27
    XxxxD  
    OP
       2019-03-11 10:06:36 +08:00
    @ik 谢谢,我试了下, 的确是代理的问题,我用本地代理访问 httpbin.org/ip 显示的是代理的 ip, 奇怪的是我在 google cloud vm 实例布置的 ss 没显示啥问题啊,google could vm 还需要另外设置啥么, 我防火墙 http/https 也都开的啊
    rocketman13
        28
    rocketman13  
       2019-03-11 11:03:48 +08:00
    除了基本的 HTTP 代理,Request 还支持 SOCKS 协议的代理。这是一个可选功能,若要使用, 你需要安装第三方库。

    你可以用 pip 获取依赖:

    $ pip install requests[socks]
    安装好依赖以后,使用 SOCKS 代理和使用 HTTP 代理一样简单:

    proxies = {
    'http': 'socks5://user:pass@host:port',
    'https': 'socks5://user:pass@host:port'
    }
    zephyru
        29
    zephyru  
       2019-03-11 11:30:27 +08:00
    歪个楼...我上次在阿里云上暴露不加验证的 SS 端口后被封了...
    涉嫌提供访问境外非法信息的途径...
    一路看下来..感觉有点乱..不太清楚为啥不通过客户端连接而是直接用 requests 连...
    XxxxD
        30
    XxxxD  
    OP
       2019-03-11 11:58:32 +08:00
    @zephyru 因为我想自己弄多个代理 ip 弄爬虫,本地已经走了一个了
    XxxxD
        31
    XxxxD  
    OP
       2019-03-11 11:59:37 +08:00
    @rocketman13 谢谢,有安装下载,就是这样使用,ss 是没有用户的,我使用 root:ssPassword@host:port 无解,难道 user:pass 是服务器的?
    XxxxD
        32
    XxxxD  
    OP
       2019-03-11 12:01:00 +08:00
    @Juszoe 就是两个服务器,我都部署了 ss, 然后一台电脑,本地客户端走了一个,我想脚本直接走另外一个代理,不走本地端口这样,就是奇怪那种用来卖的 ip 是咋布置的
    RainyH2O
        33
    RainyH2O  
       2019-03-11 13:28:18 +08:00
    你是打算自己实现一个 ss 客户端,自己实现 ss 的加密?
    ss 是 cs 架构的软件,不走 client 的话你得自己写 client 的逻辑
    那么问题来了你干嘛不用已经写好的 sslocal ?
    ss!=socks proxy
    radc
        34
    radc  
       2019-03-11 13:48:32 +08:00
    socks 是 sslocal 暴露出来的那个端口,ssserver 提供的端口是供 sslocal 来传送加密数据的啊,那个不是 socks...
    所以想在 requests 里用 socks 代理,必须起一个 sslocal
    XxxxD
        35
    XxxxD  
    OP
       2019-03-11 13:49:16 +08:00
    @RainyH2O orz, 好的,谢谢,一语惊醒梦中人,我就是爬虫需要多个 ip, 买了几个之后感觉又贵又不怎么稳,然后就打起了服务器自建代理的主意,我得再研究研究怎么服务器自建代理
    XxxxD
        36
    XxxxD  
    OP
       2019-03-11 13:51:43 +08:00
    @radc
    好的,谢谢,楼上已经把我拍醒了,我应该研究如何服务器自建代理而不是让 ss 变成脚本可用代理。
    话说,妹纸头像好亲切。
    orz
    XxxxD
        37
    XxxxD  
    OP
       2019-03-11 13:52:27 +08:00
    @0yster 童鞋,看#33 楼和#34 楼,ss 不等于可用 socks 代理,得换个路
    zephyru
        38
    zephyru  
       2019-03-11 14:21:36 +08:00
    实际上 sslocal 暴露出来的端口的确可以用 requests 连但是没法直接加认证...
    如果用的国内的云最好不要直接暴露....
    看你的需求..如果只有两个,本地起两个客户端分别代到不同的端口上不就好了...
    只是感觉这么弄又笨又麻烦..
    话说只是想用服务器做代理转发似乎也不是一定要用 ss 来做吧...如果这块有找到好用的东西能顺便告诉我一下就好了..
    anxudong
        39
    anxudong  
       2019-05-13 01:25:48 +08:00
    您好,我也遇到了这个问题,应该怎么写呢
    anxudong
        40
    anxudong  
       2019-05-13 01:27:18 +08:00
    用户名默认是 root?配置文件中只有密码
    XxxxD
        41
    XxxxD  
    OP
       2019-08-14 15:11:13 +08:00
    @anxudong 看 33 和 34 楼
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1188 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 18:14 · PVG 02:14 · LAX 10:14 · JFK 13:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.