通过公司防火墙使用urllib2打开网站 - 11004 getaddrinfo失败
我正在尝试通过公司防火墙访问一个网站,使用了下面的代码:
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, url, username, password)
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
conn = urllib2.urlopen('http://python.org')
但是出现了错误:
URLError: <urlopen error [Errno 11004] getaddrinfo failed>
我尝试了不同的处理方式(也尝试了稍微不同的ProxyHandler),但似乎都不行。
有没有人能告诉我,错误可能是什么原因?有没有其他方法可以提供凭证,让它正常工作?
2 个回答
4
在Windows系统上,我发现Python会使用IE Internet Options-> LAN Settings
里的设置。也就是说,即使我们用urllib2
来安装一个打开器,并指定proxy_url
,它还是会继续使用IE的设置。
最后,当我导出了一个系统变量后,它就正常工作了:
http_proxy=http://userid:pswd@proxyurl.com:port
5
如果你在使用代理,而这个代理需要用户名和密码(很多公司用的代理都是这样的),你需要用urllib2来设置代理处理器。
proxy_url = 'http://' + proxy_user + ':' + proxy_password + '@' + proxy_ip
proxy_support = urllib2.ProxyHandler({"http":proxy_url})
opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler)
urllib2.install_opener(opener)
HTTPBasicAuthHandler是用来提供你要访问的网站的凭证,而不是用来通过代理的。上面的代码片段可能会对你有帮助。