Почему эта команда curl работает, но не мой почтовый запрос через python? - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь отправить запрос POST на https://accounts.spotify.com/api/token через python и библиотеку request, но не могу заставить его работать. Я могу выполнить запрос с помощью команды curl:

примечание - параметры, заключенные в * *, верны и работают в запросе curl

 curl -H "Authorization: Basic *base 64 encoded client ID and secret*"
 -d grant_type=authorization_code -d code=*auth code* -d 
 redirect_uri=https%3A%2F%2Fopen.spotify.com%2F 
 https://accounts.spotify.com/api/token 

, и запрос работает нормально, однако когда я пытаюсь сделать то же самое, что я считаю запросом в python, я всегда получаю одну и ту же ошибку неверного запроса

    headers = {
        "Authorization": "Basic *base64 encoded client ID and secret*"
    }
    params = {
        "grant_type": "authorization_code",
        "code": code,
        "redirect_uri": "https://open.spotify.com/"
    }

    response = requests.post(
        url,
        params=params,
        headers=headers
    )

Если вы можете помочь мне выяснить, чем отличаются два запроса и почему python никто, кажется, никогда не сработает, что было бы замечательно.

см. Раздел 2 https://developer.spotify.com/documentation/general/guides/authorization-guide/ параметры

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Вы используете флаг -d в своем запросе curl, который означает data.

Таким образом, вы должны передать свои параметры как data также в своем Python POST запросе:

headers = {
        "Authorization": "Basic *base64 encoded client ID and secret*"
    }
    params = {
        "grant_type": "authorization_code",
        "code": code,
        "redirect_uri": "https://open.spotify.com/"
    }

    response = requests.post(
        url,
        data=params,
        headers=headers
    )
0 голосов
/ 05 мая 2020

похоже, что вы поместили полезную нагрузку в неправильный аргумент, попробуйте заменить params на json или data (зависит от того, какой тип запросов принимает API):

response = requests.post(
    url,
    json=params,
    headers=headers
)
...