如何通过TOR和Privoxy使用Python请求获取HTTPS内容

时间:2012-11-19 22:13:13

标签: python proxy tor python-requests

我的系统上有TOR设置,Privoxy已经过测试并运行良好。我想要做的是通过此设置代理HTTPS请求,以便这些GET和POST通过TOR。下面是我可以生成的最简单的代码版本:

import requests
proxy = { 'http':'127.0.0.1:8118','https':'127.0.0.1:8118' }
r = requests.get('https://www.whatismyip.com/',proxies=proxy)
#r = requests.get('http://www.whatsmyip.org/')
print r

使用HTTPS时,我没有得到响应正文(r.content为空),但我确实获得了200状态代码,我可以在Privoxy日志中看到请求。我在this线程上看到了一个错误,但似乎几个月前在this的Requests库中已经解决了。

我的privoxy设置是基本设置,并通过添加以下两行来监听localhost:

forward-socks4a / localhost:9050 .
forward-socks5 / localhost:9050 .

此时我不确定发生了什么,但我所做的一切似乎都没有用。我在Python 2.6.5上使用最新的请求库和urllib3。

2 个答案:

答案 0 :(得分:6)

urllib3尚未正确支持HTTPS代理(由requests使用)。

有关详细信息,请参阅requests issue 905urllib3 issue 50

答案 1 :(得分:1)

尝试requesocks,一个requests的分支,旨在直接连接到SOCKS代理(就像Tor一样,首先没有使用Privoxy。如果你需要Privoxy,你可能会出局好运,但除此之外,pip install requesocks并替换

import requests

import requesocks
requests = requesocks.session()
requests.proxies = {"http": "socks5://127.0.0.1:8118",
                   "https": "socks5://127.0.0.1:8118"}

现在,requests变量是一个会话(包含requests.get()和朋友),您可以使用与直接导入requests完全相同的方式。