我正在尝试使用Scribe上传照片,但它似乎无法解决错误:
Authentication challenged received is null
我不知道,由于缺乏关于此事的文件如何解决这个问题。
相关代码是:
try{
OAuthRequest r = new OAuthRequest(Verb.POST, url);
ByteArrayOutputStream out = new ByteArrayOutputStream();
toSend.writeTo(out);
r.addPayload(out.toByteArray());
r.addHeader(toSend.getContentType().getName(), toSend.getContentType().getValue());
OAuth10aServiceImpl oauth = (OAuth10aServiceImpl)oauthImpl;
OAuthRequest sr = new OAuthRequest(Verb.GET, serviceProvider);
sr.addOAuthParameter(OAuthConstants.TOKEN, oauthToken.getToken());
sr.addOAuthParameter(OAuthConstants.REALM,"http://api.twitter.com/");
oauth.addOAuthParams(sr, client._oauthToken);
r.addHeader("X-Auth-Service-Provider",serviceProvider);
String oauthHeader = oauth.api.getHeaderExtractor().extract(sr);
r.addHeader("X-Verify-Credentials-Authorization", oauthHeader);
System.out.println(r.getHeaders().get("X-Verify-Credentials-Authorization"));
return r.send();
}catch(Exception e){
e.printStackTrace();
return null;
}
我认为它与消费者密钥有关,因为它似乎没有添加到签名中,但我不太确定究竟发生了什么:/
任何帮助将不胜感激
答案 0 :(得分:1)
固定。这是代码:
OAuthRequest r = new OAuthRequest(Verb.POST, url);
ByteArrayOutputStream out = new ByteArrayOutputStream();
toSend.writeTo(out);
r.addPayload(out.toByteArray());
r.addHeader(toSend.getContentType().getName(), toSend.getContentType().getValue());
OAuth10aServiceImpl oauth = (OAuth10aServiceImpl)client._oauth;
OAuthRequest sr = new OAuthRequest(Verb.GET, serviceProvider);
oauth.signRequest(client._oauthToken, sr);
r.addHeader("X-Auth-Service-Provider",serviceProvider);
String oauthHeader = sr.getHeaders().get("Authorization");
r.addHeader("X-Verify-Credentials-Authorization", oauthHeader);
对于想要了解其工作原理的任何人,toSend
是HttpEntity
,其中包含文件和其他StringBody
部分,client._oauthToken
是Token
个对象。 r
是我的twitpic请求,而serviceProvider
是Twitter API验证凭据网址(在yfrog等某些服务上发生了变化)