Manchmal funktioniert es plötzlich nicht mehr, nachdem es länger als eine Stunde normal und ohne Fehler funktioniert hat, oder der Fehler „requests.packages.urllib3.Exceptions.ProtocolError: ('Connection aborted.', BadStatusLine("''",)) wird an anderer Stelle gemeldet im Internet. Einige sagen, es sei eine Zeitüberschreitung, andere sagen, es sei mit https verbunden, andere sagen, es müsse auf Python3.5 oder höher geändert werden (ich verwende Python3.4)
Das Programm ist das Originalprogramm in den vorherigen Fragen plus einer Schleife von while True:, danke
Programm:
import requests
import json
url = "https://api-fxpractice.oanda.com/v1/prices"
instruments = 'EUR_USD,USD_CAD'
account_id = 'cawa11'
params = {'instruments':instruments,'accountId':account_id}
access_token = 'a554db3a48ac8180a6996a5547ba1663-ac5947e64456cc5842a34f4ce05e4380'
headers = {'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip,deflate',
'Authorization':'Bearer '+access_token} #Bearer后有空格
while True :
r = requests.get(url,headers = headers, params=params)
price = r.json()
print(r.json())
print(price['prices'][0]['instrument'].replace('_','/'),':',round((price['prices'][0]['ask']+price['prices'][0]['bid'])/2,4),' ',price['prices'][0]['time'])
print(price['prices'][1]['instrument'].replace('_','/'),':',round((price['prices'][1]['ask']+price['prices'][1]['bid'])/2,4),' ',price['prices'][1]['time'])
Fehlermeldung:
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 554, in urlopen
self._prepare_proxy(conn)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 750, in _prepare_proxy
conn.connect()
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\connection.py", line 230, in connect
self._tunnel()
File "C:\Python34\lib\http\client.py", line 815, in _tunnel
(version, code, message) = response._read_status()
File "C:\Python34\lib\http\client.py", line 321, in _read_status
raise BadStatusLine(line)
http.client.BadStatusLine: ''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\adapters.py", line 376, in send
timeout=timeout
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 609, in urlopen
_stacktrace=sys.exc_info()[2])
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\util\retry.py", line 247, in increment
raise six.reraise(type(error), error, _stacktrace)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\packages\six.py", line 309, in reraise
raise value.with_traceback(tb)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 554, in urlopen
self._prepare_proxy(conn)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 750, in _prepare_proxy
conn.connect()
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\packages\urllib3\connection.py", line 230, in connect
self._tunnel()
File "C:\Python34\lib\http\client.py", line 815, in _tunnel
(version, code, message) = response._read_status()
File "C:\Python34\lib\http\client.py", line 321, in _read_status
raise BadStatusLine(line)
requests.packages.urllib3.exceptions.ProtocolError: ('Connection aborted.', BadStatusLine("''",))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\lenovo\Desktop\hh.py", line 27, in <module>
r = requests.get(url,headers = headers, params=params)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\api.py", line 67, in get
return request('get', url, params=params, **kwargs)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:\Python34\lib\site-packages\requests-2.9.1-py3.4.egg\requests\adapters.py", line 426, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))
Neue Fehlermeldung nach der Änderung, wie @prolifes sagte:
Traceback (letzter Aufruf zuletzt):
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py“, Zeile 559, in urlopen
body=body, headers=headers)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py“, Zeile 345, in _make_request
self._validate_conn(conn)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py“, Zeile 784, in _validate_conn
conn.connect()
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connection.py“, Zeile 252, in connect
ssl_version=resolved_ssl_version)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilssl_.py“, Zeile 305, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
Datei „C:Python34libssl.py“, Zeile 365, in wrap_socket
_context=self)
Datei „C:Python34libssl.py“, Zeile 583, in init
self.do_handshake()
Datei „C:Python34libssl.py“, Zeile 810, in do_handshake
self._sslobj.do_handshake()
TimeoutError: [WinError 10060] Der Verbindungsversuch ist fehlgeschlagen, weil die Verbindungspartei nach einer gewissen Zeit nicht richtig geantwortet hat oder der verbundene Host nicht reagiert hat.
Während der Behandlung der oben genannten Ausnahme ist eine weitere Ausnahme aufgetreten:
Traceback (letzter Aufruf zuletzt):
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsadapters.py“, Zeile 376, in send
timeout=timeout
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py“, Zeile 609, in urlopen
_stacktrace=sys.exc_info()[2])
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilretry.py“, Zeile 247, inkrementell
raise six.reraise(type(error), error, _stacktrace)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3packagessix.py“, Zeile 309, in Reraise
raise value.with_traceback(tb)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py“, Zeile 559, in urlopen
body=body, headers=headers)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py“, Zeile 345, in _make_request
self._validate_conn(conn)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py“, Zeile 784, in _validate_conn
conn.connect()
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connection.py“, Zeile 252, in connect
ssl_version=resolved_ssl_version)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilssl_.py“, Zeile 305, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
Datei „C:Python34libssl.py“, Zeile 365, in wrap_socket
_context=self)
Datei „C:Python34libssl.py“, Zeile 583, in init
self.do_handshake()
Datei „C:Python34libssl.py“, Zeile 810, in do_handshake
self._sslobj.do_handshake()
requests.packages.urllib3.Exceptions.ProtocolError: ('Verbindung abgebrochen.', TimeoutError(10060, 'Der Verbindungsversuch ist fehlgeschlagen, weil die Verbindungspartei nach einer gewissen Zeit nicht richtig geantwortet hat oder der verbundene Host nicht geantwortet hat.', Keine, 10060, Keine))
Während der Behandlung der oben genannten Ausnahme ist eine weitere Ausnahme aufgetreten:
Traceback (letzter Aufruf zuletzt):
Datei „C:UserslenovoDesktopii.py“, Zeile 30, in Ausführung
r = requests.get(url,headers = headers, params=params)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsapi.py“, Zeile 67, in get
return request('get', url, params=params, **kwargs)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsapi.py“, Zeile 53, in Anfrage
return session.request(method=method, url=url, **kwargs)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestssessions.py“, Zeile 468, in Anfrage
resp = self.send(prep, **send_kwargs)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestssessions.py“, Zeile 576, in send
r = adapter.send(request, **kwargs)
Datei „C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsadapters.py“, Zeile 426, in send
raise ConnectionError(err, request=request)
requests.Exceptions.ConnectionError: ('Verbindung abgebrochen.', TimeoutError(10060, 'Der Verbindungsversuch ist fehlgeschlagen, weil die Verbindungspartei nach einer gewissen Zeit nicht richtig geantwortet hat oder der verbundene Host nicht geantwortet hat.', Keine, 10060, Keine))
Während der Behandlung der oben genannten Ausnahme ist eine weitere Ausnahme aufgetreten:
Traceback (letzter Aufruf zuletzt):
Datei „C:UserslenovoDesktopii.py“, Zeile 133, in <module>
run()
Datei „C:UserslenovoDesktopii.py“, Zeile 128, in Ausführung
print(traceback.format_exc())
NameError: Name „Traceback“ ist nicht definiert
把关键代码封装成函数,并加上错误处理,保证while true不中断,同时打印信息去排查
在@prolifes的帮助下问题已解决,程序如下:
coding: utf-8
import requests
import json
import traceback
def run():
if name == '__main__':