【问题标题】:What is causing urllib2.urlopen() to connect via proxy?是什么导致 urllib2.urlopen() 通过代理连接?
【发布时间】:2010-11-18 19:39:22
【问题描述】:

我正在尝试读取我们公司网络中的 URL。特别是我正在联系的服务器在一个办公室,而客户端 PC 在另一个办公室:

print(urlopen(r"http://london.mycompany/mydir/").read())

每当我运行这个函数时,我都会得到:

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
File "C:\Python24\lib\urllib2.py", line 130, in urlopen
  return _opener.open(url, data)
File "C:\Python24\lib\urllib2.py", line 364, in open
  response = meth(req, response)
File "C:\Python24\lib\urllib2.py", line 471, in http_response
  response = self.parent.error(
File "C:\Python24\lib\urllib2.py", line 402, in error
 return self._call_chain(*args)
File "C:\Python24\lib\urllib2.py", line 337, in _call_chain
 result = func(*args)
File "C:\Python24\lib\urllib2.py", line 480, in http_error_default
 raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 407: Proxy Authentication Required

奇怪的是这两台计算机之间没有防火墙 - 由于某种原因,url 决定通过代理连接到网络服务器,我们通常使用该代理连接到公司外部的内容,在这种情况下那是失败的,因为我没有对其进行身份验证。

我很确定故障发生在客户端 PC 中:我对服务器进行了 nslookup 和 ping,以确认两台计算机之间存在连接,但是当我使用 Windows 的 TCPView 观看事务时,我可以看到 python.exe 进程正在连接到一个完全不同的服务器(是的,代理!)。

那么可能是什么原因造成的呢?请注意,未设置 os.environ["http_proxy"] 变量 - 此变量通常用于使 urllib 通过代理服务器连接。这不是这里的情况。有没有其他可能具有相同效果的东西?

仅供参考,在非常封闭的公司环境中在 Windows XP 32 位上运行 Python 2.4.4。

【问题讨论】:

  • 你试过连接IP吗?那会发生什么?如果 IP 有效,则您的域查找有问题。

标签: python http networking


【解决方案1】:

它从系统设置中读取。使用urllib.FancyURLOpener

opener = urllib.FancyURLopener({})
f = opener.open("http://london.mycompany/mydir/")
f.read()

【讨论】:

  • @Salim 注册表/系统 plist 文件,取决于操作系统。
  • Windows 32bit 上的 Python2.4.4 - 你有没有机会指出具体的设置?你知道是否有办法覆盖它吗?
  • 我不确定我知道它在 XP 上的位置。您可以在代码中覆盖它,将{'http': 'http://proxy.example.com:8080/'} 传递给FancyURLOpener,这就是文档所说的。 docs.python.org/library/urllib.html
  • 实际上,我并不是想写一个新的客户端——我想让python的分发(鸡蛋安装和打包工具)不使用不合适的代理。理论上我可以更改分发的源代码,但是我更愿意利用现有的功能来防止这种不良行为。
  • @Salim 为什么你认为它使用了不合适的代理?正如您所写,您已经设置了代理系统范围的设置,python 只是使用它。 http_proxy 不是唯一获得代理设置的地方。
猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多