【发布时间】:2016-11-19 22:42:24
【问题描述】:
我想将以下 OpenFIGI API 命令转换成 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)
有人知道为什么它不起作用吗?我错过了什么吗? 非常感谢您的帮助。
-- 编辑--
问题似乎来自密钥本身的“-”编码。
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-AAAAAAA'。
有没有办法修改我的 requests.post 参数以显示 '-' ? 谢谢。
【问题讨论】:
-
你试过手动转换json吗?而不是
json=data也许是data=json.dumps(data) -
看起来你的 curl 命令没有发送
"exchCode":"US",但你的请求代码发送了。 -
我尝试了
data = json.dumps(data),但不幸的是它仍然给了我代码 400。这个问题似乎与我传递 api 密钥的方式有关,但不明白为什么...
标签: python curl python-requests api-key