2016-11-19 3 views
0

Я хотел бы преобразовать следующую OpenFIGI команду API в Python:Преобразовать локон с двумя заголовками в 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"}]' 

мне удалось заставить его работать без X-OPENFIGI-APIKEY, но не может найти путь к отправьте оба заголовка.

Вот мой рабочий код:

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) 

Но в том числе и ключ API, он возвращает код «400», который в соответствии с openfigi для 'Тело запроса не является массивом.

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

У кого-нибудь есть идея, почему он не работает? Я что-то упускаю? Большое спасибо за вашу помощь.

- EDIT -

кажется, что проблема исходит от кодировки из «-» в самом ключе.

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 

Этот код выше показывает 'X-OPENFIGI-APIKEY': '11111 \ XE2 \ X80 \ x902222 \ XE2 \ X80 \ x90XXXX \ XE2 \ X80 \ x905555 \ XE2 \ X80 \ x90AAAAAAAA' в заголовки запроса ,

Я предполагаю, что это должно быть «X-OPENFIGI-APIKEY»: «11111-XXXX-5555-AAAAAAAA».

Есть ли способ изменить параметры request.post для отображения '-'? Спасибо.

+0

Вы пытались преобразовать json вручную? Вместо 'json = data', возможно,' data = json.dumps (data) ' – Shaun

+0

Похоже, что ваша команда curl не отправляет' "exchCode": "US" ', но ваш код запросов. –

+0

Я попытался с 'data = json.dumps (data)' и, к сожалению, он все еще дает мне код 400. Проблема, похоже, связана с тем, как я передаю ключ api, но не могу понять, почему именно ... – CarlosM

ответ

0

\xe2\x80\x90 является декомпенсатором юникода, а не ASCII. Вы должны ввести ключ напрямую, а не использовать то, что вы нарезали &. Убедитесь, что вы отправляете ascii.

Это, как указано, я сделал cut & вставьте ваш код и не возникло проблем. (Убедитесь, что вы сменили json.dump(data) на json.dumps(data))

Проверьте, какая версия python и запросы?

+0

Это работает! Написание его вместо копирования, вставляющего ключ, решило его. Большое спасибо за вашу помощь. – CarlosM

+0

Рад это услышать, Карлос. Префикс '\ xe2 \ x80' действительно распространен. Вы можете увидеть его для причудливых цитат, неразрывных пробелов и т. Д., Когда вы вырезаете и вставляете из других документов. – pbuck

Смежные вопросы