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
Hostto 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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With