【问题标题】:curl to python requests error: "no api key supplied"curl 到 python 请求错误:“没有提供 api 密钥”
【发布时间】:2018-12-26 21:37:10
【问题描述】:

我正在尝试使用 python 请求执行 curl 命令。据我所知,我所做的一切都是正确的,但无论我如何尝试包含它,网站都无法识别 api 密钥。基本上,我试图访问的网站希望将 api 密钥放在 url 的开头。当我使用 curl 执行此操作时,它可以完美运行。但是,当我通过 python 请求尝试它时,它不起作用。将其作为字典中的键值对发送也不起作用。

这行得通

curl -H "Content-Type:application/json" -d '{"ndbno":["11124"],"type":"f"}' [API KEY]@api.nal.usda.gov/ndb/V2/reports

这是请求代码:

import requests

headers = {'Content-Type': 'application/json',}

data = '{"ndbno":["11124"],"type":"f"}'

response = requests.post('http://[API KEY]@api.nal.usda.gov/ndb/V2/reports', headers=headers, data=data)

结果是一个包含以下消息的 json 响应:“{'error': {'code': 'API_KEY_MISSING', 'message': 'No api_key is provided. Get one at http://api.nal.usda.gov:80'}} "

如果我从 url 中删除 [API KEY] 并将其作为 "api_key":"[API KEY]" 添加到数据字典中,它也不起作用

顺便说一句,我没有将密钥作为列表或任何内容传递,我只是不想在我的问题中发布物理密钥。

我完全是 python 和 stackoverflow 的新手,但我已经尽职尽责,并且一直在寻找答案并测试几个小时来格式化请求的不同方法。非常感谢任何帮助!

【问题讨论】:

    标签: python curl python-requests api-key


    【解决方案1】:

    查看 PubAG API,您似乎可以简单地在 URL 查询字符串中传递 api_key。我假设您使用的 API 是一样的,但粗略搜索没有产生任何文档。

    尝试: https://api.nal.usda.gov/ndb/V2/reports?api_key=[API_KEY]

    response = requests.post('https://api.nal.usda.gov/ndb/V2/reports?api_key=[API_KEY]', headers=headers, data=data)
    

    我没有 API 密钥来尝试这个,但是在我的浏览器中导航到 https://api.nal.usda.gov/ndb/V2/reports?api_key=asdfds 给我一个无效的 API 密钥错误,这表明端点识别出我已经给出了一个 API 密钥。

    【讨论】:

      【解决方案2】:

      可能是因为requests没有从URL解析API KEY,试试这个:

      response = requests.post('http://api.nal.usda.gov/ndb/V2/reports', headers=headers, data=data, auth=(API_KEY, ''))
      

      这使用基本身份验证(Authorization 标头)传递它,这与 curl 在解析 URL 时所做的行为相同。

      通常在基本身份验证中,您将拥有用户名和密码。例如: auth=('<username>', '<password>')

      由于这个 API 似乎只关心用户名,所以我将密码留空。

      【讨论】:

      • 我按照您的建议进行了尝试,但使用我的有效 api 密钥得到了完全相同的错误消息。
      • UPDATE 实际上我误解了格式并试图将实际密钥作为第二项。当我将密钥作为 auth 元组中的第一项并留下第二个空白(按照您的指示)时,它就像一个魅力!谢谢你为我解开这个谜!我试图为你的帖子投票,但我想我太新手了,所以它不会让我:(
      猜你喜欢
      • 2018-04-28
      • 2020-12-10
      • 2014-08-05
      • 2021-08-27
      • 1970-01-01
      • 2023-02-22
      • 2019-04-30
      • 1970-01-01
      • 2019-03-29
      相关资源
      最近更新 更多