如何在 JAVA 中 GET/POST 使用 OAuth 2.0 的资源(状态代码 415)
How to GET/POST a ressource with OAuth 2.0 in JAVA (Status Code 415)
我在 Java 中有一个 oauth 2.0 的实现,我想用 Shopware 6 API 尝试一些东西。我可以毫无问题地获得访问令牌,据我所知,我正在做所有正确的事情来请求这个 access_token 的资源。在 GET 请求的 header 中,我放置了 'Authorization Bearer' + access_token header 以及 "Content-Type"、"application/json" header。
HttpGet get = new HttpGet(resourceURL);
get.addHeader("Content-Type", "application/json");
以后
if (isValid(accessToken)) {
// update the access token
// System.out.println("New access token: " + accessToken);
oauthDetails.setAccessToken(accessToken);
// remove the old auth header
get.removeHeaders(OAuthConstants.AUTHORIZATION);
// add the new auth header
get.addHeader(OAuthConstants.AUTHORIZATION,
getAuthorizationHeaderForAccessToken(oauthDetails.getAccessToken()));
get.releaseConnection();
response = client.execute(get);
code = response.getStatusLine().getStatusCode();
我总是得到的错误代码是 415。
这是完整的回复:
HttpResponseProxy{HTTP/1.1 415 Unsupported Media Type [Date: Thu, 04 Jul 2019 08:45:38 GMT, Server: Apache/2.4.25 (Debian), Cache-Control: no-cache, private, Access-Control-Allow-Origin: *, Access-Control-Allow-Methods: GET,POST,PUT,PATCH,DELETE, Access-Control-Allow-Headers: Content-Type,Authorization,sw-context-token,sw-access-key,sw-language-id,sw-version-id, sw-version-id: , sw-language-id: , sw-context-token: , x-frame-options: deny, X-Debug-Token: c1766c, X-Debug-Token-Link: http://localhost:8000/_profiler/c1766c, X-Robots-Tag: noindex, Vary: Authorization, Keep-Alive: timeout=5, max=100, Connection: Keep-Alive, Transfer-Encoding: chunked, Content-Type: application/json] ResponseEntityProxy{[Content-Type: application/json,Chunked: true]}}
我试图获取的端点是“http://localhost:8000/api/v1/category/”端点。如果我用 Insomnia/Postman 做这整件事,我会得到预期的类别信息。
有谁知道可能出了什么问题?我在这里错过了什么?
请添加以下内容header
'Accept': 'application/json'
正如 nuriselcuk 在评论中指出的那样,缺少的是 Accept header。
我添加了
post.addHeader("Accept", "application/json");
现在工作正常。
我在 Java 中有一个 oauth 2.0 的实现,我想用 Shopware 6 API 尝试一些东西。我可以毫无问题地获得访问令牌,据我所知,我正在做所有正确的事情来请求这个 access_token 的资源。在 GET 请求的 header 中,我放置了 'Authorization Bearer' + access_token header 以及 "Content-Type"、"application/json" header。
HttpGet get = new HttpGet(resourceURL);
get.addHeader("Content-Type", "application/json");
以后
if (isValid(accessToken)) {
// update the access token
// System.out.println("New access token: " + accessToken);
oauthDetails.setAccessToken(accessToken);
// remove the old auth header
get.removeHeaders(OAuthConstants.AUTHORIZATION);
// add the new auth header
get.addHeader(OAuthConstants.AUTHORIZATION,
getAuthorizationHeaderForAccessToken(oauthDetails.getAccessToken()));
get.releaseConnection();
response = client.execute(get);
code = response.getStatusLine().getStatusCode();
我总是得到的错误代码是 415。 这是完整的回复:
HttpResponseProxy{HTTP/1.1 415 Unsupported Media Type [Date: Thu, 04 Jul 2019 08:45:38 GMT, Server: Apache/2.4.25 (Debian), Cache-Control: no-cache, private, Access-Control-Allow-Origin: *, Access-Control-Allow-Methods: GET,POST,PUT,PATCH,DELETE, Access-Control-Allow-Headers: Content-Type,Authorization,sw-context-token,sw-access-key,sw-language-id,sw-version-id, sw-version-id: , sw-language-id: , sw-context-token: , x-frame-options: deny, X-Debug-Token: c1766c, X-Debug-Token-Link: http://localhost:8000/_profiler/c1766c, X-Robots-Tag: noindex, Vary: Authorization, Keep-Alive: timeout=5, max=100, Connection: Keep-Alive, Transfer-Encoding: chunked, Content-Type: application/json] ResponseEntityProxy{[Content-Type: application/json,Chunked: true]}}
我试图获取的端点是“http://localhost:8000/api/v1/category/”端点。如果我用 Insomnia/Postman 做这整件事,我会得到预期的类别信息。 有谁知道可能出了什么问题?我在这里错过了什么?
请添加以下内容header
'Accept': 'application/json'
正如 nuriselcuk 在评论中指出的那样,缺少的是 Accept header。 我添加了
post.addHeader("Accept", "application/json");
现在工作正常。