是什么导致urllib2.urlopen()通过代理连接?

时间:2010-11-18 19:39:22

标签: python http networking

我正在尝试在公司网络中读取网址。特别是我正在联系的服务器在一个办公室,而客户端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决定通过我们通常用于连接公司外部内容的代理连接到Web服务器,在这种情况下这是失败的,因为我没有验证它。

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

那么可能导致这种情况呢?请注意,os.environ [“http_proxy”]变量未设置 - 此变量通常用于通过代理服务器进行urllib连接。情况并非如此。可能有其他可能具有相同效果的东西吗?

仅供参考,在非常锁定的企业环境中,在Windows XP 32bit上运行Python 2.4.4。

1 个答案:

答案 0 :(得分:2)

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

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