problema Java utilizzando commons-HttpClient-3.X.jar
-
29-09-2019 - |
Domanda
ho bisogno di passare da commons-HttpClient-3.0.jar a commons-HttpClient-3.1.jar ma cambiando il vaso il mio codice non funziona più. Il problema è che la nuova codifica biblioteca automaticamente il passato uri. c'è un modo per evitarlo? Devo interagire con Yahoo API e non devo codificare l'URI altrimenti non posso accedere ai servizi. Qui c'è un graffio del mio codice, mettendo a confronto la linea due stampa osservo la differenza tra l'URI passato e quello usato.
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());
}
E questo è l'output:
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 riuscita: HTTP / 1.1 401 Forbidden
coppia: oauth_problem signature_invalid
particolarly:
% 26 & oauth_version ->% 2526 & oauth_version
e
xoauth_lang_pref = "it-IT" -> = xoauth_lang_pref% 22IT-ci% 22
Soluzione
Si può evitare la codifica in questo modo,
URI uri = new URI(DeliciousApi.generateRequestToken(), true);
Tuttavia, si potrebbe ottenere eccezione sul vostro URL originale, che non è correttamente codificato. È necessario codificare le virgolette doppie. Ancora meglio, sbarazzarsi di esso.
Altri suggerimenti
Sarebbe utilizzando setUri ( " https://api.login.yahoo.com/ OAuth / v2 / get_request_token ") seguito da setQueryString ( Inserisci stringa qui ) lavoro? Mi sembra di ricordare di avere più controllo sulla stringa di query facendo in questo modo ...