18

HTTP リクエストの認証ヘッダーを読み取ろうとしています (何かを追加する必要があるため) が、ヘッダー値が常に null になります。他のヘッダーは問題なく動作します。

public void testAuth() throws MalformedURLException, IOException{
    URLConnection request = new URL("http://google.com").openConnection();
    request.setRequestProperty("Authorization", "MyHeader");
    request.setRequestProperty("Stackoverflow", "anotherHeader");
    // works fine
    assertEquals("anotherHeader", request.getRequestProperty("Stackoverflow"));
    // Auth header returns null
    assertEquals("MyHeader", request.getRequestProperty("Authorization"));
}

私は何か間違ったことをしていますか?これは「セキュリティ」機能ですか?これを URLConnection で機能させる方法はありますか、それとも別の HTTP クライアント ライブラリを使用する必要がありますか?

4

4 に答える 4

29

どうやら、それはセキュリティの「機能」です。URLConnection は、実際にはsun.net.www.protocol.http.HttpURLConnectionのインスタンスです。次のように定義getRequestPropertyします。

    public String getRequestProperty (String key) {
        // don't return headers containing security sensitive information
        if (key != null) {
            for (int i=0; i < EXCLUDE_HEADERS.length; i++) {
                if (key.equalsIgnoreCase(EXCLUDE_HEADERS[i])) {
                    return null;
                }
            }
        }
        return requests.findValue(key);
    }

配列は次のEXCLUDE_HEADERSように定義されます。

   // the following http request headers should NOT have their values
   // returned for security reasons.
   private static final String[] EXCLUDE_HEADERS = {
           "Proxy-Authorization",
           "Authorization"
   };
于 2010-05-19T12:40:45.910 に答える
0

余分な依存関係には満足していませんが、Commons Http に切り替えるという提案に従って、当面の問題は解決しました。

元のコードの問題が何であったかを知りたいです。

于 2010-05-19T09:22:29.437 に答える
-1

使ってみましたURLConnection.addRequestProperty()か?これは、HTTP リクエスト ヘッダーを追加するために使用する方法です。

于 2010-05-19T09:02:33.037 に答える