【问题标题】:Python get API responses using Bearer TokenPython 使用 Bearer Token 获取 API 响应
【发布时间】:2021-06-12 09:57:57
【问题描述】:

我检查了所有示例,但没有一个显示像我这样的端点。如何使用端点访问 API:

end_point = f"https://something.com/version/input1/{0}/input2/{1}".format(payload["input1"], payload["input2"])

api_token = {"authorization": "Bearer LonGTokEN"}
    
api_response = requests.post(url=end_point, auth=api_token['authorization'])

我收到TypeError: 'str' object is not callable。基于这个solution,我需要data,但我不确定我应该如何使用我的端点。

另外,不确定是否正确调用了不记名令牌。

请帮忙。谢谢。

【问题讨论】:

  • 删除f?我收到405 错误
  • 您能否提供端点详细信息以便重现?是的,您的有效负载应该是您的data 输入的一部分。
  • 至少 HTTP 错误与 Python 错误不同。 405 表示不允许 POST
  • 由于您没有请求正文,您确定要发送 POST 请求吗?
  • @OneCricketeer 你说得对。我已经使用get 修改了我的代码,现在它可以工作了!

标签: python python-requests bearer-token


【解决方案1】:

我想问题在于将f-string 与format 混合在一起。

你需要使用其中之一:

end_point = "https://something.com/version/input1/{0}/input2/{1}".format(payload["input1"], payload["input2"])

或:

end_point = f"https://something.com/version/input1/{payload['input1']}/input2/{payload['input2']}"

【讨论】:

  • 我试过了,它似乎导致了错误。所以我改变了你的建议(Y)
【解决方案2】:

好的。我真傻。我对我的代码进行了更改似乎有效。

class BearerAuth(requests.auth.AuthBase):
    def __init__(self, token):
        self.token = token
    def __call__(self, r):
        r.headers["authorization"] = "Bearer " + self.token
        return r

def test_api_no_pax(mock_input, expected_output):
    """
    Testing API after deployment (no pax)
    """
    with open(f"./assets/{mock_input}.json") as json_file:
        payload = json.load(json_file)

    end_point = "https://something.com/version/input1/{0}/input2/{1}".format(payload["input1"], payload["input2"])

    api_token = {"authorization": "LonGTokEN"} # removed Bearer since I use BearerAuth

    api_response = requests.get(url=end_point, auth=BearerAuth(api_token['authorization']))
    print(api_response.text)

虽然我希望代码更简洁,而不必编写 BearerAuth。强烈建议提供更好的解决方案!

编辑: 不使用BearerAuth 类。

api_token = {"authorization": "Bearer LonGTokEN"}
api_response = requests.get(url=end_point, headers=api_token)

【讨论】:

  • 只是为了我的确认,f-strings 和 format() 都照原样工作吗?我希望它会抛出您在问题中发布的错误。
  • 你不需要上课。只需将auth 参数更改为headers 并传递“api 令牌”字典(实际上是请求标头)并添加回承载部分
  • @OneCricketeer 你又是对的!谢谢你:)
  • 请修复 f 字符串/格式问题。这就是为什么会出现 str vs int 错误。
猜你喜欢
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2015-12-25
  • 2014-01-02
  • 2019-11-25
  • 2014-12-03
  • 2020-05-10
相关资源
最近更新 更多