2010-06-22 3 views
0

commons-httpclient-3.0.jar에서 commons-httpclient-3.1.jar 으로 전달해야하지만 jar 파일을 변경하면 내 코드가 더 이상 작동하지 않습니다. 문제는 새 라이브러리가 전달 된 URI를 자동으로 인코딩한다는 것입니다. 이것을 피할 방법이 있습니까? 야후 API와 상호 작용해야하며 URI를 인코딩하면 안됩니다. 그렇지 않으면 서비스에 액세스 할 수 없습니다. 여기에 내 코드의 흠집이 있습니다. 두 개의 인쇄 라인을 비교하여 전달 된 URI와 사용 된 URI의 차이를 관찰합니다.commons-httpclient-3.X.jar을 사용한 Java 문제

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 particolarly

:

% 26 & oauth_version -> % 2526,403,210 oauth_version

xoauth_lang_pref = "EN을-우리를"-> xoauth_lang_pref = % 22en - 우리에게 22 %

답변

0

당신은 당신이 당신의 원래 URL에 예외를 얻을 수 있습니다, 그러나

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

,이 작업을 수행하여 인코딩을 피할 수있다 ... 이런 식으로 일을 쿼리 문자열보다 효율적으로 제어를 가진 기억하는 것 제대로 인코딩되지 않았습니다. 큰 따옴표를 인코딩해야합니다. 더 나은, 그것을 제거하십시오.

+0

팁 주셔서 대단히 감사합니다! 이게 내 문제를 해결했습니다! 나는 결코 전에 tought가 아니기 때문에 나는 어리 석다! :-) – AndyPower

0
setUri를 사용겠습니까이 (" https://api.login.yahoo.com/oauth/v2/get_request_token") setQueryString 다음

(삽입 문자열 여기) 작동합니까? 나는

+0

해답을 가져 주셔서 감사합니다.하지만 이미이 솔루션을 사용해 보았습니다. 결과는 같습니다. 내 프로젝트에서는 api commons-httpclient-3.1.jar를 사용해야하지만 yahoo 서비스를 호출하는 코드는 변경할 수 있습니다. Yahoo와 상호 작용하는 데 사용할 수있는 또 다른 API가 있습니까? – AndyPower