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?
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: