0

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

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

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

这将返回一个 status=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 代理请求时,它看起来好像代理参数为空。现在我需要通过各种代理传递流量,并且我不想要任何静默失败。

我的问题是:为什么事情会默默地失败,我能做些什么来解决它?

4

1 回答 1

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"}.

于 2013-08-26T14:46:49.620 回答