使用Scribe,OAuth Echo似乎不适用于Twitpic

时间:2012-07-31 14:58:19

标签: java oauth scribe

我正在尝试使用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;
    }

我认为它与消费者密钥有关,因为它似乎没有添加到签名中,但我不太确定究竟发生了什么:/

任何帮助将不胜感激

1 个答案:

答案 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);

对于想要了解其工作原理的任何人,toSendHttpEntity,其中包含文件和其他StringBody部分,client._oauthTokenToken个对象。 r是我的twitpic请求,而serviceProvider是Twitter API验证凭据网址(在yfrog等某些服务上发生了变化)