在 windows XP、python 2.5 和 2.6 中,我测试了以下代码:
import urllib2
proxy= urllib2.ProxyHandler({'http': '127.0.0.1:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com/')
在上面的代码中,我从 httplib.py 的第 349 行得到了一个 BadStatusLine 异常。
我有一个运行在 127.0.0.1:8080 的代理,它可以工作(我可以将浏览器设置为通过 proxyswitchy 使用它,当它打开时,我可以访问在它关闭时被阻止的站点 [在中国])。
如果我将其更改为 socks 代理,
proxy= urllib2.ProxyHandler({'socks': '127.0.0.1:8080'})
然后根本不使用代理。
我从Proxy with urllib2的问题中得到了代码,它几乎完全相同 - 可能出了什么问题?
更新:urllib2 不支持 socks 代理。
最终让它与 curl 一起工作:
c = pycurl.Curl()
#stupid GFW
if settings.CHINA:
c.setopt(pycurl.PROXY, '127.0.0.1')
c.setopt(pycurl.PROXYPORT, 8087)
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)