代码之家  ›  专栏  ›  技术社区  ›  Salim Fadhley

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

  •  0
  • Salim Fadhley  · 技术社区  · 15 年前

    我正在尝试读取我们公司网络中的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。

    1 回复  |  直到 15 年前
        1
  •  2
  •   khachik    15 年前

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

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