Question

Je dois passer des communes-httpclient-3.0.jar aux communes-httpclient-3.1.jar mais en changeant le pot mon code ne fonctionne plus. Le problème est que la nouvelle bibliothèque automatiquement le encode uri passé. Y at-il un moyen d'éviter cela? Je dois interagir avec Yahoo API et je ne dois pas encoder l'URI je ne peux pas autrement accès aux services. Ici, il y a une égratignure de mon code, comparant les deux lignes d'impression je constate la différence entre l'URI passé et celui utilisé.

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

Et voici la sortie:

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 a échoué: HTTP / 1.1 401 Forbidden

coppia: oauth_problem signature_invalid

particolarly:

% 26 & oauth_version ->% 2526 et oauth_version

et

xoauth_lang_pref = "fr-fr" -> = xoauth_lang_pref% 22FR-nous 22%

Était-ce utile?

La solution

Vous pouvez éviter coder en faisant cela,

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

Cependant, vous pourriez obtenir exception sur votre URL d'origine, ce qui est pas correctement codé. Vous devez encoder des guillemets doubles. Mieux encore, vous en débarrasser.

Autres conseils

Plût à l'aide setUri ( " https://api.login.yahoo.com/ OAuth / v2 / get_request_token ") suivie setQueryString ( Insérer une chaîne ici ) travail? Je me souviens d'avoir plus de contrôle sur la chaîne de requête de le faire de cette façon ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top