我想通過使用Spring RestTemplate,通過exchange方法發送HTTP請求。爲Spring RestTemplate設置「主機」標題不起作用
第三個參數是HttpEntity
的一個實例,它允許設置請求的標頭/正文。我嘗試下面的代碼片斷:
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());
}
}
注意http://httpbin.org/headers是一個簡單的HTTP請求&響應服務,它(在這種情況下)返回的HTTP標頭。
運行Java代碼的結果如下:
{
"headers": {
"Accept": "text/plain, */*",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "whatever"
}
}
正如你所看到的,User-Agent
設置爲我想要的東西,但Host
不是。
如何將
Host
設置爲我想要的值?
我不知道你可以 - 它通常不會有意義了'Host'頭設置的東西從不同URI。 – chrylis
@chrylis:感謝您的評論。在我的使用案例中,我正在爲某個主機H寫一個反向代理。代理將託管在主機H上,並將通過IP與實際主機H聯繫。但是,由於實際主機H使用虛擬主機,我必須在我的請求中指定主機名稱H(即從反向代理到IP地址的請求)。 –