Heim  >  Fragen und Antworten  >  Hauptteil

python3.x – Python verbindet die simulierte Handels-API von Oanda, um die fünfte JSON-Frage zu erhalten

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

为情所困为情所困2704 Tage vor1711

Antworte allen(2)Ich werde antworten

  • 滿天的星座

    滿天的星座2017-05-24 11:37:19

    把关键代码封装成函数,并加上错误处理,保证while true不中断,同时打印信息去排查

    # 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()

    Antwort
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-24 11:37:19

    在@prolifes的帮助下问题已解决,程序如下:

    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,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()

    Antwort
    0
  • StornierenAntwort