我正尝试使用以下网址从公司防火墙后面访问网站: -
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也略有不同),但似乎没有用。
任何可能导致错误的原因的线索以及提供凭据并使其工作的任何不同方式?
答案 0 :(得分:5)
如果您使用的是Proxy,并且该代理具有用户名和密码(许多公司代理都有),则需要使用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用于为您要访问的站点提供凭据,而不是通过代理。以上代码段可能会对您有所帮助。
答案 1 :(得分:4)
在Windows上,我观察到python使用IE Internet Options-> LAN Settings
设置。
因此,即使我们使用urllib2
来安装opener并指定proxy_url
,它也会继续使用IE设置。
当我导出系统变量时,它最终工作正常:
http_proxy=http://userid:pswd@proxyurl.com:port