【问题标题】:opening websites using urllib2 from behind corporate firewall - 11004 getaddrinfo failed从公司防火墙后面使用 urllib2 打开网站 - 11004 getaddrinfo 失败
【发布时间】:2011-01-31 04:31:14
【问题描述】:

我正在尝试使用以下方式从公司防火墙后面访问网站:-

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 的方式也略有不同),但似乎不起作用。

有什么线索可以说明错误的原因以及提供凭据并使其正常工作的任何不同方式?

【问题讨论】:

  • 代理想要什么样的身份验证?如果它需要Proxy-Authenticate: NTLM,那么它就不可能与 Python 一起工作,很抱歉。

标签: python urllib2 firewall


【解决方案1】:

如果您使用代理并且该代理具有用户名和密码(许多公司代理都有),您需要使用 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 用于为您要访问的站点提供凭据,而不是通过代理。上面的 sn-p 可能会对你有所帮助。

【讨论】:

  • 我已经尝试过了,但是它给了 Http 401 Unauthorized 错误。我怀疑我的公司代理是 NTLM,上述方法可能不够用。
  • 请尝试使用code.google.com/p/python-ntlm 也尝试使用此链接中的建议,stackoverflow.com/questions/1481398/… 如果这些都有效且普通 urllib2 无效,请向 bugs.python.org 提交报告,如果无效已经存在。猜猜,它需要处理。
  • python-ntlm 没有帮助 - 给出了相同的 getaddinfo 错误。将尝试pycurl。非常感谢您的指点。
【解决方案2】:

在 Windows 上,我观察到 python 使用 IE Internet Options-&gt; LAN Settings 设置。 所以即使我们使用urllib2安装opener并指定proxy_url,它也会继续使用IE设置。

当我导出系统变量时,它终于运行良好:

http_proxy=http://userid:pswd@proxyurl.com:port

【讨论】:

  • 称我为哑巴,但出口到哪里,如何出口?你是在命令行运行的吗?如果是这样,我假设使用set?
猜你喜欢
  • 2011-08-09
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 2019-06-23
  • 2017-02-27
  • 1970-01-01
  • 2011-03-07
  • 2013-08-29
相关资源
最近更新 更多