Python requests - cant load any url: 'Remote end closed connection without response'
我试图用anaconda python 3.5从url中获取数据
1 2 3 4 | import requests url ='http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi' r = requests.get(url) r.content |
可以在浏览器中打开网址而不会出现问题...
但我收到一个错误(对于这个网址和我尝试的任何其他网址):
-------------------------------------------------------------------------- TypeError Traceback (most recent call
last)
C:\Anaconda3\lib\site-packages
equests\packages\urllib3\connectionpool.py
in _make_request(self, conn, method, url, timeout,
**httplib_request_kw)
375 try: # Python 2.7, use buffering of HTTP responses
--> 376 httplib_response = conn.getresponse(buffering=True)
377 except TypeError: # Python 2.6 and olderTypeError: getresponse() got an unexpected keyword argument
'buffering'During handling of the above exception, another exception occurred:
RemoteDisconnected Traceback (most recent call
last)
C:\Anaconda3\lib\site-packages
equests\packages\urllib3\connectionpool.py
in urlopen(self, method, url, body, headers, retries, redirect,
assert_same_host, timeout, pool_timeout, release_conn, **response_kw)
558 timeout=timeout_obj,
--> 559 body=body, headers=headers)
560C:\Anaconda3\lib\site-packages
equests\packages\urllib3\connectionpool.py
in _make_request(self, conn, method, url, timeout,
**httplib_request_kw)
377 except TypeError: # Python 2.6 and older
--> 378 httplib_response = conn.getresponse()
379 except (SocketTimeout, BaseSSLError, SocketError) as e:C:\Anaconda3\lib\http\client.py in getresponse(self) 1173
try:
-> 1174 response.begin() 1175 except ConnectionError:C:\Anaconda3\lib\http\client.py in begin(self)
281 while True:
--> 282 version, status, reason = self._read_status()
283 if status != CONTINUE:C:\Anaconda3\lib\http\client.py in _read_status(self)
250 # sending a valid response.
--> 251 raise RemoteDisconnected("Remote end closed connection without"
252 " response")RemoteDisconnected: Remote end closed connection without response
During handling of the above exception, another exception occurred:
ProtocolError Traceback (most recent call
last) C:\Anaconda3\lib\site-packages
equests\adapters.py in
send(self, request, stream, timeout, verify, cert, proxies)
369 retries=self.max_retries,
--> 370 timeout=timeout
371 )C:\Anaconda3\lib\site-packages
equests\packages\urllib3\connectionpool.py
in urlopen(self, method, url, body, headers, retries, redirect,
assert_same_host, timeout, pool_timeout, release_conn, **response_kw)
608 retries = retries.increment(method, url, error=e, _pool=self,
--> 609 _stacktrace=sys.exc_info()[2])
610 retries.sleep()C:\Anaconda3\lib\site-packages
equests\packages\urllib3\util
etry.py
in increment(self, method, url, response, error, _pool, _stacktrace)
244 if read is False:
--> 245 raise six.reraise(type(error), error, _stacktrace)
246 elif read is not None:C:\Anaconda3\lib\site-packages
equests\packages\urllib3\packages\six.py
in reraise(tp, value, tb)
308 if value.traceback is not tb:
--> 309 raise value.with_traceback(tb)
310 raise valueC:\Anaconda3\lib\site-packages
equests\packages\urllib3\connectionpool.py
in urlopen(self, method, url, body, headers, retries, redirect,
assert_same_host, timeout, pool_timeout, release_conn, **response_kw)
558 timeout=timeout_obj,
--> 559 body=body, headers=headers)
560C:\Anaconda3\lib\site-packages
equests\packages\urllib3\connectionpool.py
in _make_request(self, conn, method, url, timeout,
**httplib_request_kw)
377 except TypeError: # Python 2.6 and older
--> 378 httplib_response = conn.getresponse()
379 except (SocketTimeout, BaseSSLError, SocketError) as e:C:\Anaconda3\lib\http\client.py in getresponse(self) 1173
try:
-> 1174 response.begin() 1175 except ConnectionError:C:\Anaconda3\lib\http\client.py in begin(self)
281 while True:
--> 282 version, status, reason = self._read_status()
283 if status != CONTINUE:C:\Anaconda3\lib\http\client.py in _read_status(self)
250 # sending a valid response.
--> 251 raise RemoteDisconnected("Remote end closed connection without"
252 " response")ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end
closed connection without response',))During handling of the above exception, another exception occurred:
ConnectionError Traceback (most recent call
last) in ()
3 import requests
4 url ='http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi'
----> 5 r = requests.get(url)
6 r.contentC:\Anaconda3\lib\site-packages
equests\api.py in get(url, params,
**kwargs)
67
68 kwargs.setdefault('allow_redirects', True)
---> 69 return request('get', url, params=params, **kwargs)
70
71C:\Anaconda3\lib\site-packages
equests\api.py in request(method, url,
**kwargs)
48
49 session = sessions.Session()
---> 50 response = session.request(method=method, url=url, **kwargs)
51 # By explicitly closing the session, we avoid leaving sockets open which
52 # can trigger a ResourceWarning in some cases, and look like a memory leakC:\Anaconda3\lib\site-packages
equests\sessions.py in request(self,
method, url, params, data, headers, cookies, files, auth, timeout,
allow_redirects, proxies, hooks, stream, verify, cert, json)
466 }
467 send_kwargs.update(settings)
--> 468 resp = self.send(prep, **send_kwargs)
469
470 return respC:\Anaconda3\lib\site-packages
equests\sessions.py in send(self,
request, **kwargs)
574
575 # Send the request
--> 576 r = adapter.send(request, **kwargs)
577
578 # Total elapsed time of the request (approximately)C:\Anaconda3\lib\site-packages
equests\adapters.py in send(self,
request, stream, timeout, verify, cert, proxies)
410
411 except (ProtocolError, socket.error) as err:
--> 412 raise ConnectionError(err, request=request)
413
414 except MaxRetryError as e:ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote
end closed connection without response',))
尝试使用请求会话。
1 2 3 4 5 6 7 8 9 10 11 | import requests MAX_RETRIES = 20 url ='http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi' session = requests.Session() adapter = requests.adapters.HTTPAdapter(max_retries=MAX_RETRIES) session.mount('https://', adapter) session.mount('http://', adapter) r = session.get(url) print(r.content) |
对我来说,问题是HTTP模拟库。 我在我的测试中使用HTTPretty来模拟
HTTPretty库非常年轻,虽然它明确指出如果在测试期间请求任何未模拟的URL,它将引发
HTTPretty中的错误消失了范围:
1 2 3 4 5 6 7 | httpretty.enable() # error might occur here httpretty.disable() # out of scope |
This answer is written for Googlers and might not intersect with the interests of the OP.