次のコードを使用して、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ヘッダーをオーバーライドする方法はありますか?
TIAマット
これは以前は機能していましたが、セキュリティ修正の一環として無効になっています。どうやら変更ログにメモがありません。 bugs.Sun.comには、 #7022056 のようなバグもあります。
別のヘッダーには 同様の質問 があり、答えは詳細に入るので、自分で書くのではなく、リンクするだけです。 :-)
唯一の回避策は、Sun.net.http.allowRestrictedHeaders
をtrue
に設定するか、すでに述べた httpコンポーネント のような別のhttpライブラリを使用することです。
Host
ヘッダーは、URLに基づいてHttpURLConnection
で埋められます。開くことはできませんfoo.com
とHost=bar.com
。 [〜#〜] rfc [〜#〜] から
Host request-headerフィールドは、ユーザーまたは参照リソース(通常はHTTP URL)によって指定された元のURIから取得された、要求されているリソースのインターネットホストとポート番号を指定します。
ところで、 Apache httpコンポーネント を試すこともできます。