-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>

次のようなものでも同じエラーが発生するため、DNS の問題ではありませんURL = "http://173.194.75.94"f=urllib.urlopen(URL)私はプロキシやファイアウォールの背後にいません。いつものように無効になっている私の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 に答える