2016-11-19 2 views
0

Ich mag den folgenden OpenFIGI API-Befehl in Python konvertieren:Convert Curl mit zwei Kopf Python

curl ‐v ‐X POST 'https://api.openfigi.com/v1/mapping' 
    ‐‐header 'Content‐Type: text/json'   
    ‐‐header 'X‐OPENFIGI‐APIKEY: abcdefghijklmnopqrstuvwxyz' 
    ‐‐data '[{"idType":"ID_WERTPAPIER","idValue":"851399"}]' 

Ich konnte es ohne den X-OPENFIGI-APIKEY funktioniert, kann aber nicht einen Weg finden, Sende mit beiden Headern.

Hier ist meine Arbeitscode:

import requests 
data = [{"idType":"TICKER","idValue":"AAPL","exchCode":"US"}] 
headers={"Content-Type": "text/json"} 
r=requests.post('https://api.openfigi.com/v1/mapping',headers=headers,json=data) 

aber einschließlich der API-Schlüssel, die ihm einen Code ‚400‘ zurückgibt, die openfigi nach ist für ‚Der Antrag Körper kein Array ist.‘

headers={"Content-Type": "text/json",'X‐OPENFIGI‐APIKEY' : var_key } 
r=requests.post('https://api.openfigi.com/v1/mapping',headers=headers,json=data) 

Würde jemand eine Idee haben, warum es nicht funktioniert? Fehle ich etwas? Vielen Dank für Ihre Hilfe.

- EDIT -

Es scheint, dass das Problem von der Codierung der kommt - selbst in der Taste ‚‘.

data = [{"idType":"TICKER","idValue":"AAPL","exchCode":"US"}] 
h1= {"Content-Type": "text/json","X_OPENFIGI_APIKEY" : "11111‐2222‐XXXX‐5555‐AAAAAAAA" } 
r=requests.post('https://api.openfigi.com/v1/mapping',headers=h1,data=json.dump(data)) 
r.request.headers 

Der obige Code 'X-OPENFIGI-APIKEY' zeigt: '11111 \ XE2 \ x80 \ x902222 \ XE2 \ x80 \ x90XXXX \ XE2 \ x80 \ x905555 \ XE2 \ x80 \ x90AAAAAAAA' in der Anforderungsheader .

Ich denke, es sollte "X-OPENFIGI-APIKEY": "11111-XXXX-5555-AAAAAAAAA" sein.

Gibt es eine Möglichkeit, meine requests.post Parameter zu ändern, um '-' anzuzeigen? Danke.

+0

Haben Sie versucht, den Json manuell zu konvertieren? Anstelle von 'json = data' vielleicht' data = json.dumps (data) ' – Shaun

+0

Es sieht so aus, als ob Ihr curl-Befehl nicht" exchCode ":" US "sendet, aber Ihr Anfrage-Code tut es. –

+0

Ich versuchte mit 'data = json.dumps (Daten)' und leider gibt es mir immer noch Code 400. Das Problem scheint mit der Art, wie ich den API-Schlüssel übergeben, aber kann nicht verstehen, warum genau ... – CarlosM

Antwort

0

\xe2\x80\x90 ist ein Unicode-Bindestrich anstelle von ASCII. Sie sollten den Schlüssel direkt eingeben, anstatt etwas zu verwenden, das Sie ausgeschnitten haben & eingefügt. Stellen Sie sicher, dass Sie Ascii senden.

Das gesagt, ich habe geschnitten & fügen Sie Ihren Code und hatte keine Probleme. (Stellen Sie sicher, Sie ändern json.dump(data) zu json.dumps(data))

Überprüfen Sie, welche Version von Python und Anfragen?

+0

Es funktioniert! Schreiben statt Kopieren, Einfügen des Schlüssels löste es. Vielen Dank für deine Hilfe. – CarlosM

+0

Freut mich zu hören, Carlos. Das '\ xe2 \ x80' Präfix ist wirklich üblich. Sie können es für ausgefallene Zitate, nicht brechende Leerzeichen usw. sehen, wenn Sie aus anderen Dokumenten ausschneiden und einfügen. – pbuck