为什么此curl命令有效,但我通过python发出的发帖请求无效?

时间:2020-05-05 06:08:58

标签: python curl python-requests

我正在尝试通过python和请求库向https://accounts.spotify.com/api/token发出POST请求,但无法正常工作。我可以通过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一个请求似乎从未起作用,那将是令人惊讶的。

有关参数,请参见https://developer.spotify.com/documentation/general/guides/authorization-guide/的第2节

2 个答案:

答案 0 :(得分:1)

您在-d请求中使用curl标志,该标志代表data

因此,您还应该在Python data请求中以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
    )

答案 1 :(得分:0)

好像您将有效负载置于错误的论点之下,请尝试将params更改为jsondata(取决于API接受的请求类型):

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