当我将 Http GET 调用与 OAuthConsumer 客户端一起使用时,我收到 401 Unauthorized 错误。
我拥有 Oauth 1.0 授权所需的所有参数。
Consumer Key = "XXX"
Consumer Secret = "YYY"
oauth_signature_method = "HMAC-SHA1"
oauth_timestamp = "calculated timestamp"
oauth_nonce = "calculated nonce"
oauth_version = 1.0
oauth_signature = "calculated signature"
python 中的相同 Ouath 1.0 代码对我来说效果很好,只需使用使用者密钥、秘密和signature_type='auth_header'并调用 requests.get()。下面是我的python代码:
import requests
from requests_oauthlib import OAuth1
url = "XXX"
header_auth = OAuth1('consumer_key','consumer_secret', signature_type='auth_header')
response = requests.get(url, auth=header_auth)
print(response.status_code)
print(response.content)
这是我在 Java 中的代码片段。你能建议我哪里出错了吗?
公共类 OauthConsumerClient {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
String url = "XXX";
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter("http.protocol.content-charset", "UTF-8");
HttpRequestBase httpRequest = null;
URI uri = null;
HttpResponse httpResponse = null;
OAuthConsumer oAuthConsumer = new CommonsHttpOAuthConsumer("consumer_key", "consumer_secret");
oAuthConsumer.setSigningStrategy(new AuthorizationHeaderSigningStrategy());
try {
uri = new URI(url);
httpRequest = new HttpGet(uri);
httpRequest.setHeader("Content-Type", "application/json");
oAuthConsumer.sign(httpRequest);
HttpHost target = new HttpHost(uri.getHost(), -1, uri.getScheme());
httpResponse = httpClient.execute(target, httpRequest);
System.out.println("Connection status : " + httpResponse.getStatusLine());
System.out.println("Connection status code : " + httpResponse.getStatusLine().getStatusCode());
} catch (Exception e) {
System.out.println("Exception occured");
}
InputStream inputStraem = httpResponse.getEntity().getContent();
StringWriter writer = new StringWriter();
IOUtils.copy(inputStraem, writer, "UTF-8");
String output = writer.toString();
System.out.println("Connection response : " + output);
}
}
Output
-------------------------------------------------------------------------
16:13:43.064 [main] DEBUG o.a.h.impl.client.DefaultHttpClient - Authentication required
16:13:43.064 [main] DEBUG o.a.h.impl.client.DefaultHttpClient - "URL" requested authentication
16:13:43.064 [main] DEBUG o.a.h.i.c.TargetAuthenticationStrategy - Authentication schemes in the order of preference: [Negotiate, Kerberos, NTLM, Digest, Basic]
16:13:43.064 [main] DEBUG o.a.h.i.c.TargetAuthenticationStrategy - Challenge for Negotiate authentication scheme not available
16:13:43.064 [main] DEBUG o.a.h.i.c.TargetAuthenticationStrategy - Challenge for Kerberos authentication scheme not available
16:13:43.064 [main] DEBUG o.a.h.i.c.TargetAuthenticationStrategy - Challenge for NTLM authentication scheme not available
16:13:43.064 [main] DEBUG o.a.h.i.c.TargetAuthenticationStrategy - Challenge for Digest authentication scheme not available
16:13:43.064 [main] DEBUG o.a.h.i.c.TargetAuthenticationStrategy - Challenge for Basic authentication scheme not available
Connection status : HTTP/1.1 401 Unauthorized
Connection status code : 401
16:13:43.076 [main] DEBUG org.apache.http.wire - << " ["The request must be signed"]"
16:13:43.076 [main] DEBUG o.a.h.i.c.BasicClientConnectionManager - Releasing connection org.apache.http.impl.conn.ManagedClientConnectionImpl@78691363
16:13:43.076 [main] DEBUG o.a.h.i.c.BasicClientConnectionManager - Connection can be kept alive indefinitely
Connection response : ["The request must be signed"]
注意:当我使用 Oauth 1.0 授权类型在邮递员中点击相同的 URL 时。我的身体得到响应代码 200 OK。
如果您需要更多信息,请告诉我。非常感谢你的帮助 !!!