因此,我正在使用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代理时,请求就像代理参数为空一样。现在我需要通过各种代理传递流量,我不希望任何无声的失败。
我的问题是:为什么东西会默默地失败,我该怎么做才能解决它?
答案 0 :(得分:1)
Requests
根本不支持SOCKS或HTTPS代理。
对HTTPS代理的支持已经合并到requests 2.0
分支中,因此如果您愿意,可以尝试该版本;但要小心,因为它目前是一个不稳定的分支。
urllib3
:https://github.com/shazow/urllib3/pull/68
此外,无论如何,您都错误地使用proxies
参数。它应该是{protocol_of_sites_you_visit: proxy}
的形式,所以一旦支持完成,使用SOCKS5代理实际上更符合{"http": "socks5://127.0.0.1:9050"}
。