Cómo personalizar la cabecera "huésped" en Java http cliente

Krzysztof Krason:

Aquí está mi código:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("http://127.0.0.1:8081/"))
    .header("Host", "test.example.com")
    .build();
client.send(request, HttpResponse.BodyHandlers.ofString());

Como resultado veo que envía el código anterior:

GET / HTTP/1.1
Connection: Upgrade, HTTP2-Settings
Content-Length: 0
Host: 127.0.0.1:8081
HTTP2-Settings: AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
Upgrade: h2c
User-Agent: Java-http-client/10
Host: test.example.com

Como se puede ver que envía dos Hostcabeceras (el de URI y la que se especifica), pero me gustaría que enviar el Hostencabezado que he especificado, no el de la URI. ¿Es posible con este cliente?

EDIT: En Java 11, se pone aún peor (es necesario cambiar la línea a client.send: client.send(request, HttpResponse.BodyHandlers.ofString());):

java.lang.IllegalArgumentException: restricted header name: "Host"

¿Cómo puedo personalizar esa cabecera (necesarios para las pruebas de los ejércitos virtuales)?

También probé el setHeadery obtener exactamente el mismo problema (ya sea dobles Hostcabeceras, o la excepción).

EDIT: Me informó de un error de JDK .

Krzysztof Krason:

A partir del 12 de Java (EA build 22) se ha resuelto por propiedad adicional jdk.httpclient.allowRestrictedHeaders(ver https://bugs.openjdk.java.net/browse/JDK-8213696 ).

Por lo que ahora se puede anular Host(o cualquier otro encabezado restringido) mediante la ejecución del código con: java -Djdk.httpclient.allowRestrictedHeaders=host ...

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=168122&siteId=1
Recomendado
Clasificación