-1

我正在尝试进一步学习 Python,但遇到了障碍。我无法让 urllib2/urllib 正常工作。如果我这样做,response = urllib2.urlopen('http://python.org/')我会收到此错误:

    Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    response = urllib2.urlopen('http://python.org/')
  File "C:\Python27\lib\urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 400, in open
    response = self._open(req, data)
  File "C:\Python27\lib\urllib2.py", line 418, in _open
    '_open', req)
  File "C:\Python27\lib\urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 1207, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "C:\Python27\lib\urllib2.py", line 1177, in do_open
    raise URLError(err)
URLError: <urlopen error [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond>

即使是类似的东西也会URL = "http://173.194.75.94"给出f=urllib.urlopen(URL)相同的错误,所以这不是 DNS 问题。我没有代理或防火墙。除了我的 Windows 默认防火墙,它像往常一样被禁用。即便如此,我还是将 python 和 pythonw.exe 添加到它的异常中。

任何线索如何解决这个问题?

4

1 回答 1

1

使用请求可以让你的生活更轻松;

In [1]: import requests

In [2]: pysite = requests.get('http://python.org/')

In [3]: pysite.status_code
Out[3]: 200

In [4]: pysite.ok
Out[4]: True

In [5]: pysite.text[0:40]
Out[5]: u'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML'

In [6]: pysite.error

In [7]: pysite.links
Out[7]: {}

In [8]: pysite.reason
Out[8]: 'OK'

当您尝试访问不存在或在您的网络上被阻止的站点时,您仍然会遇到异常:

In [3]: foobar = requests.get('http://foo.bar/')
---------------------------------------------------------------------------
ConnectionError                           Traceback (most recent call last)
<ipython-input-3-0917ff568fd4> in <module>()
----> 1 foobar = requests.get('http://foo.bar/')

/usr/local/lib/python2.7/site-packages/requests-0.14.1-py2.7.egg/requests/api.pyc in get(url, **kwargs)
     63 
     64     kwargs.setdefault('allow_redirects', True)
---> 65     return request('get', url, **kwargs)
     66 
     67 

/usr/local/lib/python2.7/site-packages/requests-0.14.1-py2.7.egg/requests/safe_mode.pyc in wrapped(method, url, **kwargs)
     37                 r.status_code = 0  # with this status_code, content returns None
     38                 return r
---> 39         return function(method, url, **kwargs)
     40     return wrapped

/usr/local/lib/python2.7/site-packages/requests-0.14.1-py2.7.egg/requests/api.pyc in request(method, url, **kwargs)
     49 
     50     try:
---> 51         return session.request(method=method, url=url, **kwargs)
     52     finally:
     53         if adhoc_session:

/usr/local/lib/python2.7/site-packages/requests-0.14.1-py2.7.egg/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, return_response, config, prefetch, verify, cert)
    239 
    240         # Send the HTTP Request.
--> 241         r.send(prefetch=prefetch)
    242 
    243         # Return the response.

/usr/local/lib/python2.7/site-packages/requests-0.14.1-py2.7.egg/requests/models.pyc in send(self, anyway, prefetch)
    629 
    630             except socket.error as sockerr:
--> 631                 raise ConnectionError(sockerr)
    632 
    633             except MaxRetryError as e:

ConnectionError: [Errno 8] hostname nor servname provided, or not known

但是 ConnectionError 异常提供的信息告诉你发生了什么;

In [8]: try:                    
    foobar = requests.get('http://foo.bar/')
except requests.ConnectionError as oops:
    print oops.message
   ...:     
[Errno 8] hostname nor servname provided, or not known
于 2012-12-18T16:43:29.180 回答