3

如何通过 SOCKs 代理发出 HTTP 请求(仅用ssh -D作代理)?我尝试过使用 SOCK 代理的请求,但它似乎不起作用(我看到了这个拉取请求)。例如:

proxies = { "http": "socks5://localhost:9999/" }
r = requests.post( endpoint, data=request, proxies=proxies )

继续使用 requests 库会很方便,但如果知道它可以工作,我也可以切换到 urllib2。

4

2 回答 2

5

由于SOCKS 支持已添加到 requests 2.10.0,它非常简单,并且非常接近您所拥有的

  1. 安装requests[socks]

    $ pip install requests[socks]
    
  2. 设置您的代理变量,并使用它:

    >>> import requests
    >>> proxies = {
            "http":"socks5://localhost:9999",
            "https":"socks5://localhost:9999"
        }
    >>> requests.get(
            "https://api.ipify.org?format=json",
            proxies=proxies
        ).json()
    {u'ip': u'123.xxx.xxx.xxx'}
    

需要注意的几点是不要在代理 URL 的末尾使用 a ,如果 SOCKS 服务器不支持 SOCKS5 /,您也可以将其用作方案。socks4://

于 2016-06-03T11:08:32.283 回答
3

SOCKS 对请求的支持仍在等待中。如果你愿意,你可以在这里查看我的 Github 存储库以查看我的 Socksipy 库分支。这是当前正在集成到请求中的分支;不过,在 requests 完全支持它之前还需要一段时间。

https://github.com/Anorov/PySocks/

它应该可以与 urllib2 一起使用。导入sockshandler您的文件,并按照其中的示例进行操作。你会想要像这样创建一个开瓶器:

opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, "localhost", 9050))

然后你可以使用opener.open(url)它应该通过代理隧道。

于 2013-02-21T08:54:48.567 回答