Java проблема с использованием Commons-httpClient-3.x.jar
-
29-09-2019 - |
Вопрос
Мне нужно перейти от Commons-Httpclient-3.0.jar к Commons-httpclient-3.1.jar, но изменение JAR My Code больше не работает. Проблема в том, что новая библиотека автоматически кодирует пройденную 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 запрещено
Coppia: OAuth_problem Signature_invalid
Пристально:
%26 & oauth_version -> %2526 & oauth_version
и
xoauth_lang_pref = "en-us"-> xoauth_lang_pref =%22en-us%22
Решение
Вы можете избежать кодирования, делая это,
URI uri = new URI(DeliciousApi.generateRequestToken(), true);
Тем не менее, вы можете получить исключение на своем первоначальном URL, который не является должным образом кодируется. Вам нужно кодировать двойные кавычки. Еще лучше, избавьтесь от этого.
Другие советы
Будет использовать seturi ("https://api.login.yahoo.com/oauth/v2/get_request_token«) с последующим SetQueryString (Вставьте строку здесь) Работа? Кажется, я помню, как у меня больше контроля над строкой запроса, делая это таким образом ...