python3.x - Python menyambung api dagangan simulasi oanda untuk mendapatkan soalan json soalan ke-5
为情所困
为情所困 2017-05-24 11:35:19
0
2
1794

Kadangkala ia tiba-tiba berhenti berfungsi selepas bekerja seperti biasa selama lebih daripada sejam tanpa sebarang ralat, atau ralat requests.packages.urllib3.exceptions.ProtocolError: ('Sambungan dibatalkan.', BadStatusLine("''",)) dilaporkan di tempat lain di Internet ada yang mengatakan ia telah tamat masa, ada yang mengatakan ia disambungkan ke https, ada yang mengatakan ia perlu ditukar kepada python3.5 ke atas (saya menggunakan python3.4)

Program ini ialah atur cara asal dalam soalan sebelumnya ditambah gelung sementara Benar:, terima kasih

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

Mesej ralat:

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

Mesej ralat baharu selepas membuat pengubahsuaian seperti yang dikatakan @prolifes:
Traceback (panggilan terbaharu terakhir):
Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", baris 559, dalam urlopen

body=body, headers=headers)

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", baris 345, dalam _make_request

self._validate_conn(conn)

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", baris 784, dalam _validate_conn

conn.connect()

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connection.py", baris 252, dalam sambungan

ssl_version=resolved_ssl_version)

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilssl_.py", baris 305, dalam ssl_wrap_socket

return context.wrap_socket(sock, server_hostname=server_hostname)

Fail "C:Python34libssl.py", baris 365, dalam wrap_socket

_context=self)

Fail "C:Python34libssl.py", baris 583, dalam

init

self.do_handshake()

Fail "C:Python34libssl.py", baris 810, dalam do_handshake

self._sslobj.do_handshake()

TimeoutError: [WinError 10060] Percubaan sambungan gagal kerana pihak penyambung tidak membalas dengan betul selepas tempoh masa atau hos yang disambungkan tidak bertindak balas.

Semasa pengendalian pengecualian di atas, pengecualian lain berlaku:

Traceback (panggilan terakhir terakhir):

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsadapters.py", baris 376, dalam hantar

timeout=timeout

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", baris 609, dalam urlopen

_stacktrace=sys.exc_info()[2])

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilretry.py", baris 247, dalam kenaikan

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

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3packagessix.py", baris 309, dalam reraise

raise value.with_traceback(tb)

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", baris 559, dalam urlopen

body=body, headers=headers)

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", baris 345, dalam _make_request

self._validate_conn(conn)

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connectionpool.py", baris 784, dalam _validate_conn

conn.connect()

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3connection.py", baris 252, dalam sambungan

ssl_version=resolved_ssl_version)

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestspackagesurllib3utilssl_.py", baris 305, dalam ssl_wrap_socket

return context.wrap_socket(sock, server_hostname=server_hostname)

Fail "C:Python34libssl.py", baris 365, dalam wrap_socket

_context=self)

Fail "C:Python34libssl.py", baris 583, dalam init

self.do_handshake()

Fail "C:Python34libssl.py", baris 810, dalam do_handshake

self._sslobj.do_handshake()

requests.packages.urllib3.exceptions.ProtocolError: ('Sambungan dibatalkan.', TimeoutError(10060, 'Percubaan sambungan gagal kerana pihak penyambung tidak membalas dengan betul selepas tempoh masa atau hos yang disambungkan tidak bertindak balas.', Tiada, 10060, Tiada))

Semasa pengendalian pengecualian di atas, pengecualian lain berlaku:

Traceback (panggilan terakhir terakhir):
Fail "C:UserslenovoDesktopii.py", baris 30, sedang dijalankan

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

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsapi.py", baris 67, dalam get

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

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsapi.py", baris 53, dalam permintaan

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

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestssessions.py", baris 468, dalam permintaan

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

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestssessions.py", baris 576, dalam hantar

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

Fail "C:Python34libsite-packagesrequests-2.9.1-py3.4.eggrequestsadapters.py", baris 426, dalam hantar

raise ConnectionError(err, request=request)

requests.exceptions.ConnectionError: ('Sambungan dihentikan.', TimeoutError(10060, 'Percubaan sambungan gagal kerana pihak penyambung tidak membalas dengan betul selepas tempoh masa atau hos yang disambungkan tidak bertindak balas.', Tiada, 10060, Tiada))

Semasa pengendalian pengecualian di atas, pengecualian lain berlaku:

Traceback (panggilan terbaharu terakhir):
Fail "C:UserslenovoDesktopii.py", baris 133, dalam <modul>

run()

Fail "C:UserslenovoDesktopii.py", baris 128, sedang dijalankan

print(traceback.format_exc())

NameError: nama 'traceback' tidak ditakrifkan

为情所困
为情所困

membalas semua(2)
滿天的星座

Ingkapsulkan kod kunci ke dalam fungsi dan tambah pengendalian ralat untuk memastikan bahawa walaupun benar tidak terganggu, dan pada masa yang sama mencetak maklumat untuk penyelesaian masalah

# 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()
淡淡烟草味

Masalah telah diselesaikan dengan bantuan @prolifes, prosedurnya adalah seperti berikut:

pengekodan: utf-8

permintaan import
import json
import jejak balik

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

jika nama == '__utama__':

while True:
    run()
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan