Spotify“;意外状态:400”;当/api/token-Java

Spotify“;意外状态:400”;当/api/token-Java,java,http,post,spotify,Java,Http,Post,Spotify,当我使用Postman向Spotify Swap端点发出HTTP POST请求时,服务器会给我一个包含刷新令牌的正确响应,但在使用Java应用程序访问端点时,我无法得到相同的响应 我让我的Java应用程序在直接点击Spotify端点时生成与通过Postman生成的请求相同的请求。当我监听TCP连接时,除了身份验证代码之外,我看不到两个请求之间的任何差异,这是无法重用的 使用带有a_code的邮递员的请求如下所示: bash-3.2$ nc -l 127.0.0.1 1234 PO

当我使用Postman向Spotify Swap端点发出HTTP POST请求时,服务器会给我一个包含刷新令牌的正确响应,但在使用Java应用程序访问端点时,我无法得到相同的响应

我让我的Java应用程序在直接点击Spotify端点时生成与通过Postman生成的请求相同的请求。当我监听TCP连接时,除了身份验证代码之外,我看不到两个请求之间的任何差异,这是无法重用的

使用带有
a_code
的邮递员的请求如下所示:

    bash-3.2$ nc -l 127.0.0.1 1234
    POST /api/token HTTP/1.1
    Host: localhost:1234
    Connection: keep-alive
    Content-Length: 460
    Accept: */*
    Cache-Control: no-cache
    Origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop
    Authorization: Basic <base64 encoded client_id:client_secret>
    Content-Type: application/x-www-form-urlencoded
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
    Postman-Token: b089ac57-7dcd-f94a-f315-9f28f74ac9eb
    Accept-Encoding: gzip, deflate, br
    Accept-Language: en-GB,en-US;q=0.8,en;q=0.6

code=a_code&grant_type=authorization_code&redirect_uri=my-spotifyoauth%3A%2F%2Fspotifylogincallback%2Ffree
当我将端点从
localhost:1234
切换到
accounts.spotify.com
(非伪端点)时,我从服务器上得到了400个响应,我不知道为什么

POST https://accounts.spotify.com/api/token responded with status 400
> Accept-Encoding: gzip
< Server: nginx
< Date: Tue, 14 Mar 2017 17:08:34 GMT
< Content-Type: application/json
< Content-Length: 69
< Connection: keep-alive
< Keep-Alive: timeout=600
< {"error":"server_error","error_description":"Unexpected status: 400"}
POSThttps://accounts.spotify.com/api/token 回复状态为400
>接受编码:gzip
您知道为什么即使在TCP上看到相同的请求,Spotify服务器的响应也会不同吗?如何进一步调试此问题


更新:代码不能重复使用,因此每次发出新请求时,它们应该不同。我的端点正在使通过它发送的所有代码无效。第二次使用相同的代码访问我的端点时,我得到了错误:
{“error”:“invalid_grant”,“error_description”:“invalid authorization code”}

我认为细节中有魔鬼。上面的请求肯定来自Postman,因为它有一个Postman令牌头。如果您将Java应用程序发送的内容发布到netcat,我们就可以找到答案

我可以使用上面的示例用curl重新创建请求,它对我有效,我看到了更具描述性的错误消息:

HTTP/1.1 400 Bad Request
{"error":"invalid_grant","error_description":"Authorization code expired"}

这也意味着你需要扔掉那个账户或更改你的客户机密,因为你把它贴到了stackoverflow上,但我想你已经知道了。

我认为细节是关键。上面的请求肯定来自Postman,因为它有一个Postman令牌头。如果您将Java应用程序发送的内容发布到netcat,我们就可以找到答案

我可以使用上面的示例用curl重新创建请求,它对我有效,我看到了更具描述性的错误消息:

HTTP/1.1 400 Bad Request
{"error":"invalid_grant","error_description":"Authorization code expired"}

这也意味着您需要扔掉该帐户或更改您的客户机密,因为您已将其发布到stackoverflow,但我想您已经知道了。

我忘了添加通过Java应用程序生成的请求,现在可以在更新中看到。你提到的那个错误,如果我用相同的代码第二次通过邮递员点击Spotify,我就能看到。如果我通过我的端点重用相同的代码,响应将是:{“error”:“invalid_grant”,“error_description”:“invalid authorization code”}我忘了添加通过Java应用程序生成的请求,现在可以在更新中看到它。你提到的那个错误,如果我用相同的代码第二次通过邮递员点击Spotify,我就能看到。如果通过端点重用相同的代码,响应将为:{“error”:“invalid_grant”,“error_description”:“invalid authorization code”}