0

commons-httpclient-3.0.jarからcommons-httpclient-3.1.jarに渡す必要がありますが、jarを変更するとコードが機能しなくなります。問題は、新しいライブラリが渡されたURIを自動的にエンコードすることです。これを回避する方法はありますか?Yahoo APIを操作する必要があり、URIをエンコードしないでください。エンコードしないと、サービスにアクセスできません。ここに私のコードのスクラッチがあり、渡されたURIと使用されたURIの違いを観察する2つの印刷行を比較しています。

 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.1401禁止

coppia:oauth_problemsignature_invalid

特に:

%26&oauth_version->%2526&oauth_version

xoauth_lang_pref = "en-us"-> xoauth_lang_pref =%22en-us%22

4

2 に答える 2

0

setUri(" https://api.login.yahoo.com/oauth/v2/get_request_token ") の後に setQueryString(ここに文字列を挿入) を使用すると機能しますか? このようにして、クエリ文字列をより細かく制御できるようになったことを覚えているようです...

于 2010-06-22T20:13:39.543 に答える
0

これを行うことでエンコードを回避できます。

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

ただし、適切にエンコードされていない元の URL で例外が発生する場合があります。二重引用符をエンコードする必要があります。さらに良いことに、それを取り除きます。

于 2010-06-23T00:45:46.653 に答える