python 2.5中的urllib2.proxyhandler

时间:2010-09-16 11:25:01

标签: python urllib2 httplib

在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一起使用它,当它打开时,我可以到达[在中国]关闭的网站。)< / p>

如果我将其更改为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)

3 个答案:

答案 0 :(得分:2)

urllib2 ProxyHandler不支持SOCKS协议。也许this answer会有所帮助。

答案 1 :(得分:0)

假设您的本地代理是HTTP代理而不是socks代理。试试这个:

import urllib2
proxy= urllib2.ProxyHandler({'http': 'http://127.0.0.1:8080/'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com/')

答案 2 :(得分:0)

更新:我位于中国的防火墙后面。这使问题更加复杂。 gfw破坏了连接并进行了DNS中毒。

我还没有设法让任何urllib2解决方案正常工作。但pycurl似乎确实有效,它解决了“连接重置”问题。 fb / twitter仍被阻止。

将他们的IPS添加到我的主机文件中是有效的 - 因此,对于更大规模的解决方案,需要设置dns代理。