我正在尝试在公司网络中读取网址。特别是我正在联系的服务器在一个办公室,而客户端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。
答案 0 :(得分:2)
它从系统设置中读取。使用urllib.FancyURLOpener
:
opener = urllib.FancyURLopener({})
f = opener.open("http://london.mycompany/mydir/")
f.read()