似乎无法使用python请求使https和socks代理工作

时间:2013-08-26 12:02:03

标签: python proxy python-requests

因此,我正在使用wireshark查看流量并在多种情况下比较输出。我只关注我和google.co.za之间的流量。

情况1:使用无代理访问google.co.za

requests.get('www.google.co.za')

这会返回状态= 200的响应,wireshark会显示有关我的电脑和谷歌服务器之间传输的流量的信息。到目前为止,这很棒。

情况2:使用有效的http代理访问google.co.za

requests.get("http://google.co.za",proxies={'http':proxy})

这将返回状态= 200的响应,wireshark显示有关我的电脑和谷歌服务器之间传输的流量的数据。这很棒,也很有期待。

情况3:使用有效的socks代理访问google.co.za

requests.get("http://google.co.za",proxies={'socks':proxy})

根据情况得出的结果1.嗯

情况4:与https相同的交易

requests.get("http://google.co.za",proxies={'https':proxy})

与情况1相同的结果。

问题

所以看起来当我尝试使用https和socks代理时,请求就像代理参数为空一样。现在我需要通过各种代理传递流量,我不希望任何无声的失败。

我的问题是:为什么东西会默默地失败,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:1)

Requests根本不支持SOCKS或HTTPS代理。

但是,他们正在努力工作。见这里:https://github.com/kennethreitz/requests/pull/1515

对HTTPS代理的支持已经合并到requests 2.0分支中,因此如果您愿意,可以尝试该版本;但要小心,因为它目前是一个不稳定的分支。

另一方面,另一方面,SOCKS代理支持仍在低级库中进行,urllib3https://github.com/shazow/urllib3/pull/68

此外,无论如何,您都错误地使用proxies参数。它应该是{protocol_of_sites_you_visit: proxy}的形式,所以一旦支持完成,使用SOCKS5代理实际上更符合{"http": "socks5://127.0.0.1:9050"}