Python requests library is not working, while cURL is working

北战南征 提交于 2021-01-28 08:06:43

问题


I need to retrieve a JWT (JSON Web Token) from a Microsoft API using Python (check this API documentation for Microsoft Graph)

The following Python code using the requests library does not work giving HTTP response code 400, however, the equivalent cURL command does work giving back the expected JSON containing the JWT.

Python / requests code:

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 command:

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'

From the verbose output of the requests library I can see that it is URL encoding all those HTTP query parameters, so I tend to think that should not be the problem.

  • what's wrong with the Python implementation?
  • how to make it work?

回答1:


you should pass http_query_params as data instead of params. try the following code:

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)

hope this helps



来源:https://stackoverflow.com/questions/55298936/python-requests-library-is-not-working-while-curl-is-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!