Setting “Host” header for Spring RestTemplate doesn't work

梦想的初衷 提交于 2020-02-24 12:08:39

问题


I want to send an HTTP request using Spring RestTemplate, via the exchange method.

The third parameter is an instance of HttpEntity, which allows setting the headers/body of the request. I tried the following code snippet:

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());
    }
}

Notice that http://httpbin.org/headers is a simple HTTP Request & Response Service, which (in this case) returns HTTP headers.

The result of running the Java code is as follows:

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

As you can see, the User-Agent is set to what I wanted, but the Host is not.

How can I set Host to the value I desire?


回答1:


Perhaps this helps. I don't know if the underlying http call is made through HttpUrlConnection, but setting sun.net.http.allowRestrictedHeaders to true might be worth trying.

See:

  • Can I override the Host header where using java's HttpUrlConnection class?
  • How to overwrite http-header "Host" in a HttpURLConnection?


来源:https://stackoverflow.com/questions/43223261/setting-host-header-for-spring-resttemplate-doesnt-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!