Pregunta

Necesito pasar de commons-httpclient-3.0.jar a commons-httpclient-3.1.jar pero cambiando el frasco mi código no funciona más. El problema es que la nueva biblioteca codifican automáticamente el URI transferido. Hay alguna manera de evitar esto? Debo interactuar con Yahoo API y no debo codificar la URI de lo contrario no pueden acceder a los servicios. Aquí hay un cero de mi código, comparando la línea de impresión a dos observo la diferencia entre el pasado y el URI de uno usado.

 GetMethod getMethod = new GetMethod();
    try {
        URI uri = new URI(DeliciousApi.generateRequestToken(), false);
        getMethod.setURI(uri);
        System.out.println("Passed URI: " + uri.getURI());
        int statusCode = client.executeMethod(getMethod);
        if (statusCode != HttpStatus.SC_OK) {
            System.out.println("Used URI: " + getMethod.getURI());
            System.err.println("getMethod failed: " + getMethod.getStatusLine());
        }

Y este es el resultado:

Passed URI: https://api.login.yahoo.com/oauth/v2/get_request_token?oauth_nonce=ce4630523j788f883f76314ed3965qw9&oauth_timestamp=1277236486&oauth_consumer_key=hd7sHfs5YVFuh3DRTUFgFgF7GcF4RDtsTXStGdRyJJf7WSuShQAShd2JdiwjIibHsU8YFDgshk7hd32xjA6isnNsT7SkbLS8YDHy&oauth_signature_method=plaintext&oauth_signature=53h8x475a66v238j7f43456lhhgg8s7457fwkkdd%26&oauth_version=1.0&xoauth_lang_pref="en-us"&oauth_callback=oob
Used URI:   https://api.login.yahoo.com/oauth/v2/get_request_token?oauth_nonce=ce4630523j788f883f76314ed3965qw9&oauth_timestamp=1277236486&oauth_consumer_key=hd7sHfs5YVFuh3DRTUFgFgF7GcF4RDtsTXStGdRyJJf7WSuShQAShd2JdiwjIibHsU8YFDgshk7hd32xjA6isnNsT7SkbLS8YDHy&oauth_signature_method=plaintext&oauth_signature=53h8x475a66v238j7f43456lhhgg8s7457fwkkdd%2526&oauth_version=1.0&xoauth_lang_pref=%22en-us%22&oauth_callback=oob

getMethod falló: HTTP / 1.1 401 Forbidden

coppia: oauth_problem signature_invalid

particolarly:

% 26 y oauth_version ->% 2526 y oauth_version

y

xoauth_lang_pref = "en-us" -> xoauth_lang_pref =% 22ES-nos 22%

¿Fue útil?

Solución

Usted puede evitar que codifica al hacer esto,

      URI uri = new URI(DeliciousApi.generateRequestToken(), true);

Sin embargo, es posible obtener una excepción en su URL original, que no está codificado correctamente. Es necesario para codificar comillas dobles. Aún mejor, deshacerse de él.

Otros consejos

haría con setUri ( " https://api.login.yahoo.com/ oauth / v2 / get_request_token ") seguido de setQueryString ( insertar cadena aquí ) de trabajo? Me parece recordar que tiene un mayor control sobre la cadena de consulta hacerlo de esta manera ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top