【问题标题】:Convert curl with two headers to python将带有两个标头的 curl 转换为 python
【发布时间】: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


【解决方案1】:

\xe2\x80\x90 是 unicode 连字符,而不是 ASCII。您应该直接输入密钥,而不是使用您剪切和粘贴的内容。确保您发送的是 ascii。

话虽如此,我确实剪切并粘贴了您的代码并且没有任何问题。 (确保将json.dump(data) 更改为json.dumps(data)

查看哪个版本的python和请求?

【讨论】:

  • 有效!编写它而不是复制粘贴密钥解决了它。非常感谢您的帮助。
  • 很高兴听到这个消息,卡洛斯。 \xe2\x80 前缀非常常见。当您从其他文档中剪切和粘贴时,您可能会看到花哨的引号、不间断空格等。
猜你喜欢
  • 1970-01-01
  • 2018-07-28
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
相关资源
最近更新 更多