除非指定超时,否则Python请求get不会返回

除非指定超时,否则Python请求get不会返回,python,python-2.7,python-requests,Python,Python 2.7,Python Requests,这个请求永远不会返回,或者至少我无法忍受: import requests r = requests.get('http://en.wikipedia.org/w/api.php?rcprop=ids&format=json&action=query&rclimit=10&rctype=edit&list=recentchanges&rcnamespace=0', headers={'user-agent': 'api test'}) 按Ctrl

这个请求永远不会返回,或者至少我无法忍受:

import requests
r = requests.get('http://en.wikipedia.org/w/api.php?rcprop=ids&format=json&action=query&rclimit=10&rctype=edit&list=recentchanges&rcnamespace=0', headers={'user-agent': 'api test'})
按Ctrl+C键始终会产生此回溯:

^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 383, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 486, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 330, in send
    timeout=timeout
  File "/usr/lib/python2.7/dist-packages/urllib3/connectionpool.py", line 542, in urlopen
    body=body, headers=headers)
  File "/usr/lib/python2.7/dist-packages/urllib3/connectionpool.py", line 367, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python2.7/httplib.py", line 973, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1007, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 969, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 829, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 791, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 772, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python2.7/socket.py", line 562, in create_connection
    sock.connect(sa)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
向请求添加timeout=5会导致请求成功,在超时过期后,即从API请求返回正确的数据。当然,对于每个API请求,我的应用程序都会增加5秒的延迟


这里出了什么问题?

这是因为IPv6在我的网络上工作不太好。httplib和请求似乎更喜欢IPv6(如果它可用),但如果它工作得不太好,那么在IPv6请求超时时,您可能会有很长的等待时间。设置超时会使其在超时过期后返回到IPv4,然后重试成功。在我的网络上禁用IPv6已经解决了这一问题,我想,修复IPv6也会解决这一问题。

您使用python3吗?我使用python2.7.5,好的!当我尝试时,您的请求运行良好,python 3.4和2.7可能与其他内容相关