recherche

Maison  >  Questions et réponses  >  le corps du texte

python3.x - Python connecte l'API de trading simulé d'Oanda pour obtenir la cinquième question JSON

Parfois, il cesse soudainement de fonctionner après avoir travaillé normalement pendant plus d'une heure sans aucune erreur, ou l'erreur request.packages.urllib3.exceptions.ProtocolError: ("Connection aborted.', BadStatusLine("''",)) est signalée ailleurs. sur Internet. Certains disent que le délai est expiré, certains disent qu'il est connecté à https, certains disent qu'il doit être modifié en python3.5 ou supérieur (j'utilise python3.4)

Le programme est le programme original des questions précédentes plus une boucle de while True :, merci

Programme :

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'])

Message d'erreur :

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

Nouveau message d'erreur après avoir effectué la modification comme @prolifes l'a dit :
Traceback (dernier appel le plus récent) :
Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", ligne 559, dans urlopen

body=body, headers=headers)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3connectionpool.py", ligne 345, dans _make_request

self._validate_conn(conn)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3connectionpool.py", ligne 784, dans _validate_conn

conn.connect()

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3connection.py", ligne 252, dans connect

ssl_version=resolved_ssl_version)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3utilssl_.py", ligne 305, dans ssl_wrap_socket

return context.wrap_socket(sock, server_hostname=server_hostname)

Fichier "C:Python34libssl.py", ligne 365, dans wrap_socket

_context=self)

Fichier "C:Python34libssl.py", ligne 583, dans init

self.do_handshake()

Fichier "C:Python34libssl.py", ligne 810, dans do_handshake

self._sslobj.do_handshake()

TimeoutError : [WinError 10060] La tentative de connexion a échoué car la partie qui se connecte n'a pas répondu correctement après un certain temps ou l'hôte connecté ne répondait pas.

Lors du traitement de l'exception ci-dessus, une autre exception s'est produite :

Traceback (dernier appel le plus récent) :
Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsadapters.py", ligne 376, dans send

timeout=timeout

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3connectionpool.py", ligne 609, dans urlopen

_stacktrace=sys.exc_info()[2])

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3utilretry.py", ligne 247, par incrément

raise six.reraise(type(error), error, _stacktrace)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3packagessix.py", ligne 309, en reraise

raise value.with_traceback(tb)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3connectionpool.py", ligne 559, dans urlopen

body=body, headers=headers)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3connectionpool.py", ligne 345, dans _make_request

self._validate_conn(conn)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3connectionpool.py", ligne 784, dans _validate_conn

conn.connect()

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connection.py", ligne 252, dans connect

ssl_version=resolved_ssl_version)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagessurllib3utilssl_.py", ligne 305, dans ssl_wrap_socket

return context.wrap_socket(sock, server_hostname=server_hostname)

Fichier "C:Python34libssl.py", ligne 365, dans wrap_socket

_context=self)

Fichier "C:Python34libssl.py", ligne 583, dans init

self.do_handshake()

Fichier "C:Python34libssl.py", ligne 810, dans do_handshake

self._sslobj.do_handshake()

requests.packages.urllib3.exceptions.ProtocolError : ("Connexion interrompue.", TimeoutError(10060, "La tentative de connexion a échoué car la partie qui se connecte n'a pas répondu correctement après un certain temps ou l'hôte connecté n'a pas répondu.', Aucun, 10060, Aucun))

Lors du traitement de l'exception ci-dessus, une autre exception s'est produite :

Traceback (dernier appel le plus récent) :
Fichier "C:UserslenovoDesktopii.py", ligne 30, en cours d'exécution

r = requests.get(url,headers = headers, params=params)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsapi.py", ligne 67, dans get

return request('get', url, params=params, **kwargs)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsapi.py", ligne 53, dans requête

return session.request(method=method, url=url, **kwargs)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestssessions.py", ligne 468, dans requête

resp = self.send(prep, **send_kwargs)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestssessions.py", ligne 576, dans send

r = adapter.send(request, **kwargs)

Fichier "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsadapters.py", ligne 426, dans send

raise ConnectionError(err, request=request)

requests.exceptions.ConnectionError : ('Connexion interrompue.', TimeoutError(10060, 'La tentative de connexion a échoué car la partie qui se connecte n'a pas répondu correctement après un certain temps ou l'hôte connecté n'a pas répondu.', Aucun, 10060, Aucun))

Lors du traitement de l'exception ci-dessus, une autre exception s'est produite :

Traceback (dernier appel le plus récent) :
Fichier "C:UserslenovoDesktopii.py", ligne 133, dans <module>

run()

Fichier "C:UserslenovoDesktopii.py", ligne 128, en cours d'exécution

print(traceback.format_exc())

NameError : le nom « traceback » n'est pas défini

为情所困为情所困2750 Il y a quelques jours1768

répondre à tous(2)je répondrai

  • 滿天的星座

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

    Encapsulez les codes clés dans les fonctions et ajoutez une gestion des erreurs pour garantir que même si vrai n'est pas interrompu et imprimez les informations pour le dépannage

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

    répondre
    0
  • 淡淡烟草味

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

    Le problème a été résolu avec l'aide de @prolifes, la procédure est la suivante :

    codage : utf-8

    demandes d'importation
    importation json
    importation 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
    

    si nom == '__main__':

    while True:
        run()

    répondre
    0
  • Annulerrépondre