2010-06-22 6 views
0

Je dois passer de commons-httpclient-3.0.jar à commons-httpclient-3.1.jar mais en changeant le jar mon code ne fonctionne plus. Le problème est que la nouvelle bibliothèque code automatiquement l'uri transmis. Y a-t-il un moyen d'éviter cela? Je dois interagir avec Yahoo API et je ne dois pas encoder l'URI sinon je ne peux pas accéder aux services. Ici, il ya une égratignure de mon code, en comparant les deux lignes d'impression, j'observe la différence entre l'URI passé et celui utilisé.Problème de Java en utilisant commons-httpclient-3.X.jar

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 & oauth_version

et

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

Répondre

0

Vous pouvez éviter le codage 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 encodé. Vous devez encoder des guillemets doubles. Mieux encore, débarrassez-vous.

+0

Merci beaucoup pour le pourboire! Cela a résolu mon problème! J'étais stupide parce que je n'avais jamais pensé auparavant! :-) – AndyPower

0

Plût à l'aide setUri ("https://api.login.yahoo.com/oauth/v2/get_request_token") suivie setQueryString (chaîne d'insertion 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 ...

+0

Merci pour la réponse mais j'ai déjà essayé cette solution avant et le résultat est le même. Dans mon projet, je dois utiliser api commons-httpclient-3.1.jar mais je peux changer le code pour appeler les services de yahoo. Y at-il une autre API que je peux utiliser pour interagir avec Yahoo? – AndyPower