我正在尝试读取我们公司网络中的URL。具体来说,我联系的服务器在一个办公室,而客户机在另一个办公室:
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连接。这里不是这样的。有没有其他的东西可能有同样的效果?
仅供参考,在一个非常封闭的公司环境中,在WindowsXP 32位上运行Python2.4.4。