Sometimes it suddenly stops working after working normally for more than an hour without any error, or the error requests.packages.urllib3.exceptions.ProtocolError: ('Connection aborted.', BadStatusLine("''",)), etc. on the Internet Some places say that it is timed out, some say that the connection is https, and some say that it needs to be changed to python3.5 or above (I use python3.4)
The program is the original program in the previous questions plus a while True: loop, thank you
program:
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'])
Error message:
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("''",))
The new error message that appears after making the modification as @prolifes said:
Traceback (most recent call last):
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool. py", line 559, in urlopen
body=body, headers=headers)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", line 345, in _make_request
self._validate_conn(conn)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", line 784, in _validate_conn
conn.connect()
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connection.py", line 252, in connect
ssl_version=resolved_ssl_version)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilssl_.py", line 305, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "C:Python34libssl.py", line 365, in wrap_socket
_context=self)
File "C:Python34libssl.py", line 583, in init
self.do_handshake()
File "C:Python34libssl.py", line 810, in do_handshake
self._sslobj.do_handshake()
TimeoutError: [WinError 10060] The connection attempt failed because the connecting party did not reply properly after a period of time or the connected host was unresponsive.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsadapters.py", line 376, in send
timeout=timeout
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", line 609, in urlopen
_stacktrace=sys.exc_info()[2])
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilretry.py", line 247, in increment
raise six.reraise(type(error), error, _stacktrace)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3packagessix.py", line 309, in reraise
raise value.with_traceback(tb)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", line 559, in urlopen
body=body, headers=headers)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", line 345, in _make_request
self._validate_conn(conn)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", line 784, in _validate_conn
conn.connect()
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connection.py", line 252, in connect
ssl_version=resolved_ssl_version)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilssl_.py", line 305, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "C:Python34libssl.py", line 365, in wrap_socket
_context=self)
File "C:Python34libssl.py", line 583, in init
self.do_handshake()
File "C:Python34libssl.py", line 810, in do_handshake
self._sslobj.do_handshake()
requests.packages.urllib3.exceptions.ProtocolError: ('Connection aborted.', TimeoutError(10060, 'The connection attempt failed because the connecting party did not reply properly after a period of time or the connected host did not respond.', None, 10060, None))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:UserslenovoDesktopii.py", line 30, in run
r = requests.get(url,headers = headers, params=params)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsapi.py", line 67, in get
return request('get', url, params=params, **kwargs)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsapi.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestssessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestssessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsadapters.py", line 426, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', TimeoutError(10060, 'The connection attempt failed because the connecting party did not reply properly after a period of time or the connected host did not respond.', None, 10060, None) )
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:UserslenovoDesktopii.py", line 133, in <module>
run()
File "C:UserslenovoDesktopii.py", line 128, in run
print(traceback.format_exc())
NameError: name 'traceback' is not defined
滿天的星座2017-05-24 11:37:19
Encapsulate key codes into functions and add error handling to ensure that while true is not interrupted, and at the same time print information for troubleshooting
# coding: utf-8
import requests
import json
import traceback
def run():
try:
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后有空格
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'])
except:
print traceback.format_exc()
if __name__ == '__main__':
while True:
run()
淡淡烟草味2017-05-24 11:37:19
The problem has been solved with the help of @prolifes, the procedure is as follows:
import requests
import json
import traceback
def run():
try:
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后有空格
r = requests.get(url,headers = headers, params=params,timeout=5)
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'])
except:
#print traceback.format_exc()
pass
if name == '__main__':
while True:
run()