27

次のコードを使用して、Java で http 接続を開きます。

 URL url = new URL("http://stackoverflow.com");
 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 conn.setDoOutput(true);
 conn.setRequestMethod("GET");
 conn.setRequestProperty("Host", "Test:8080");
 conn.getOutputStream();

ただし、 conn.setRequestProperty("Host", "Test:8080") を呼び出しても、メソッドを呼び出す順序に関係なく効果がないように見え、ホストは宛先サーバーにリセットされます。別のライブラリを使用せずに Host ヘッダーをオーバーライドする方法はありますか?

ティアマット

4

3 に答える 3

36

これは以前は機能していましたが、セキュリティ修正の一環として無効になりました。どうやら変更ログにメモがありません。bugs.sun.com には、これに関する#7022056のようなバグもあります。

別のヘッダーにも同様の質問があり、回答がより詳細になるため、自分で書く代わりにリンクするだけです。:-)

唯一の回避策は、前述のhttp componentssun.net.http.allowRestrictedHeadersのような別の http-library に設定するtrueか、別の http-library を使用することのようです。

于 2011-11-17T19:01:20.283 に答える
8

ヘッダーは、URL に基づいてHost埋められます。でHttpURLConnection開くことはできません。RFCからfoo.comHost=bar.com

Host request-header フィールドは、要求されているリソースのインターネット ホストとポート番号を指定します。これは、ユーザーまたは参照リソース (通常は HTTP URL) によって指定された元の URI から取得されます。

ところで、 Apache http componentsを試すこともできます。

于 2011-10-04T13:57:01.323 に答える