如何通过 SOCKs 代理发出 HTTP 请求(仅用ssh -D
作代理)?我尝试过使用 SOCK 代理的请求,但它似乎不起作用(我看到了这个拉取请求)。例如:
proxies = { "http": "socks5://localhost:9999/" }
r = requests.post( endpoint, data=request, proxies=proxies )
继续使用 requests 库会很方便,但如果知道它可以工作,我也可以切换到 urllib2。
如何通过 SOCKs 代理发出 HTTP 请求(仅用ssh -D
作代理)?我尝试过使用 SOCK 代理的请求,但它似乎不起作用(我看到了这个拉取请求)。例如:
proxies = { "http": "socks5://localhost:9999/" }
r = requests.post( endpoint, data=request, proxies=proxies )
继续使用 requests 库会很方便,但如果知道它可以工作,我也可以切换到 urllib2。
由于SOCKS 支持已添加到 requests 2.10.0,它非常简单,并且非常接近您所拥有的
安装requests[socks]
:
$ pip install requests[socks]
设置您的代理变量,并使用它:
>>> 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://
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)
它应该通过代理隧道。