2017-04-05 51 views
0

を入力して、のHTTPリクエストをexchangeメソッドで送信したいとします。Spring RestTemplateの "Host"ヘッダーを設定しても動作しません

第3パラメータは、HttpEntityのインスタンスで、要求のヘッダー/本文を設定できます。 http://httpbin.org/headersは、単純なHTTPリクエストのHTTPヘッダーを返す(この場合)&応答サービスであること

import org.springframework.http.*; 
import org.springframework.web.client.RestTemplate; 

public class Connector { 
    public static void main(String[] args) { 

     HttpHeaders headers = new HttpHeaders(); 
     headers.set("Host", "www.example.com"); 
     headers.set("User-Agent", "whatever"); 


     RestTemplate restTemplate = new RestTemplate(); 

     ResponseEntity<String> responseEntity = restTemplate.exchange(
       "http://httpbin.org/headers", HttpMethod.GET, 
       new HttpEntity<String>(null, headers), String.class); 

     System.out.println(responseEntity.getBody()); 
    } 
} 

に注意:私は、次のコードスニペットを試みました。あなたが見ることができるように

{ 
    "headers": { 
    "Accept": "text/plain, */*", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "whatever" 
    } 
} 

は、User-Agentは私が欲しかったものに設定されていますが、Hostではない次のよう

Javaコードを実行した結果です。

Hostを希望の値に設定するにはどうすればよいですか?

+0

私はあなたができるかわからない - それは、通常とは異なるものに 'Host'ヘッダーを設定しても意味がありません。 URI。 – chrylis

+0

@chrylis:コメントありがとう。私の使用例では、一部のホストHに対してリバースプロキシを作成しています。プロキシはホストHでホストされ、IPで実際のホストHに接続します。しかし、実際のホストHは仮想ホスティングを使用するため、私の要求(すなわち、IPアドレスへのリバースプロキシからの要求)にホスト名Hを指定する必要があります。 –

答えて

1

これはおそらく役立ちます。基本的なhttp呼び出しがHttpUrlConnectionによって行われたかどうかはわかりませんが、sun.net.http.allowRestrictedHeadersをtrueに設定すると試してみる価値があります。

参照:

+0

ありがとうございました。あなたは私の日を救った! 'System.setProperty(" sun.net.http.allowRestrictedHeaders "、" true ");の設定は完全に機能しているようです。 –

+0

注意!あなたはSpring RestTemplateに関する質問をしましたが、この修正はSunのHttpURLConnectionに関するものです。 RestTemplateをApache ConnectionFactoryで構成すると(これは非常に良い考えです)、この修正は無関係になります。 – slim

関連する問題