gpt4 book ai didi

Python requests 库不工作,而 cURL 工作

转载 作者:行者123 更新时间:2023-12-01 01:06:31 36 4
gpt4 key购买 nike

我需要使用 Python 从 Microsoft API 检索 JWT(JSON Web token )(查看 this Microsoft Graph 的 API 文档)

以下使用 requests 库的 Python 代码无法提供 HTTP 响应代码 400,但是,等效的 cURL 命令确实可以返回包含 JWT 的预期 JSON。

Python/请求代码:

tenant = "<MY_FOO_TENANT>"
token_url = "https://login.microsoftonline.com/{}/oauth2/v2.0/token".format(tenant)
http_headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
http_query_params = {
"client_id": "<MY_FOO_C_ID>",
"scope": "<MY_FOO_SCOPE>",
"client_secret": "<MY_FOO_C_SECRET>",
"grant_type": "client_credentials",
}
http_response = requests.post(token_url, params=http_query_params, headers=http_headers)

cURL 命令:

curl -v -X POST \
--data-urlencode 'client_id=<MY_FOO_C_ID>' \
--data-urlencode 'scope=<MY_FOO_SCOPE>' \
--data-urlencode 'client_secret=<MY_FOO_C_SECRET>' \
--data-urlencode 'grant_type=client_credentials' \
-H 'Content-Type: application/x-www-form-urlencoded' \
'https://login.microsoftonline.com/<MY_FOO_TENANT>/oauth2/v2.0/token'

requests 库的详细输出中,我可以看到它对所有这些 HTTP 查询参数进行 URL 编码,因此我倾向于认为这不应该是问题所在。

  • Python 实现有什么问题?
  • 如何让它发挥作用?

最佳答案

您应该将http_query_params作为data而不是params传递。尝试以下代码:

tenant = "<MY_FOO_TENANT>"
token_url = "https://login.microsoftonline.com/{}/oauth2/v2.0/token".format(tenant)
http_headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
http_body = {
"client_id": "<MY_FOO_C_ID>",
"scope": "<MY_FOO_SCOPE>",
"client_secret": "<MY_FOO_C_SECRET>",
"grant_type": "client_credentials",
}
http_response = requests.post(token_url, data=http_body, headers=http_headers)

希望这有帮助

关于Python requests 库不工作,而 cURL 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55298936/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com