Проблема с Java при использовании commons-httpclient-3.X.jar - PullRequest
0 голосов
/ 23 июня 2010

Мне нужно перейти от commons-httpclient-3.0.jar к commons-httpclient-3.1.jar, но при смене jar мой код больше не работает.Проблема в том, что новая библиотека автоматически кодирует переданный URI.Есть ли способ избежать этого?Я должен взаимодействовать с Yahoo API и не должен кодировать URI, в противном случае я не могу получить доступ к сервисам.Здесь есть царапина моего кода, сравнивая две строки печати, я наблюдаю разницу между переданным URI и использованным.

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

И это вывод:

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 не удалось: HTTP / 1.1 401 Запрещено

Копия: oauth_problem signature_invalid

в частности:

% 26 & oauth_version ->% 2526 & oauth_version

и

xoauth_lang_pref = "en-us" -> xoauth_lang_pref =% 22en-us% 22 * ​​1017 *

Ответы [ 2 ]

0 голосов
/ 23 июня 2010

Вы можете избежать кодирования, выполнив это,

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

Однако вы можете получить исключение на исходном URL, который неправильно закодирован.Вам нужно кодировать двойные кавычки.Еще лучше, избавься от этого.

0 голосов
/ 23 июня 2010

Будет ли работать setUri ("https://api.login.yahoo.com/oauth/v2/get_request_token") с последующим setQueryString ( вставить строку здесь )"? Кажется, я помню, что имел больше контроля над строкой запроса, делающей это таким образом ...

...