Usando Scribe, OAuth Echo no parece funcionar con Twitpic

Estoy tratando de cargar fotos usando Scribe, y parece que no funciona y aparece un error:

Authentication challenged received is null

Y no tengo idea, debido a la falta de documentación al respecto, cómo solucionar esto.

El código relevante es:

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;
    }

Estoy pensando que es algo con la clave del consumidor, ya que no parece que se agregue a la firma, pero no estoy muy seguro de lo que realmente está pasando:/

Cualquier ayuda sería apreciada

preguntado el 31 de julio de 12 a las 15:07

Ah, sí, cambié la visibilidad de algunas partes de Scribe para poder acceder a las partes que necesitaba:

1 Respuestas

Fijado. Aquí está el código:

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

Para cualquiera que quiera saber cómo funciona esto, toSend es un HttpEntity que contiene el archivo y otros StringBody partes y client._oauthToken es un Token objeto. r es mi pedido de twitpic y serviceProvider es la URL de verificación de credenciales de la API de Twitter (que cambia en algunos servicios como yfrog)

Respondido 31 Jul 12, 20:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.