通过公司防火墙使用urllib2打开网站 - 11004 getaddrinfo失败

6 投票
2 回答
23166 浏览
提问于 2025-04-16 10:55

我正在尝试通过公司防火墙访问一个网站,使用了下面的代码:

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是用来提供你要访问的网站的凭证,而不是用来通过代理的。上面的代码片段可能会对你有帮助。

撰写回答