-
Bug
-
Resolution: Fixed
-
P3
-
11
-
x86_64
-
linux
A DESCRIPTION OF THE PROBLEM :
Trying to override an user agent with `setHeader` causes two User-Agent headers to be in a request. An user specified user agent should override the default one. I'm not certain if this issue exists for HTTP/2.0 requests, but it does for HTTP/1.1 requests. I consider that to be a bug, because `setHeader` is said in documentation to "overwrite any previously set values for name"
This is an issue, as some servers ban generic user agents (like Java-http-client) and block multiple user agents, like one provided by default in Java HTTP Client. Not allowing to override User-Agent would necessiate hacks in order to be able to use HttpClient for services which ban generic user agents.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Try making a request with an user agent header specified
2. Notice Java-http-client was submitted as an user agent
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Server retrieved a single user agent: "Example user agent"
ACTUAL -
Server retrieved two User-Agent headers:
- Java-http-client/11-ea
- Example user agent
---------- BEGIN SOURCE ----------
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
class Main {
public static void main(String[] args) throws IOException, InterruptedException {
var client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("https://httpbin.org/headers"))
.setHeader("User-Agent", "Example user agent")
.build();
System.out.println(client.send(request, BodyHandlers.ofString()).body());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use a library that does it correctly.
FREQUENCY : always
Trying to override an user agent with `setHeader` causes two User-Agent headers to be in a request. An user specified user agent should override the default one. I'm not certain if this issue exists for HTTP/2.0 requests, but it does for HTTP/1.1 requests. I consider that to be a bug, because `setHeader` is said in documentation to "overwrite any previously set values for name"
This is an issue, as some servers ban generic user agents (like Java-http-client) and block multiple user agents, like one provided by default in Java HTTP Client. Not allowing to override User-Agent would necessiate hacks in order to be able to use HttpClient for services which ban generic user agents.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Try making a request with an user agent header specified
2. Notice Java-http-client was submitted as an user agent
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Server retrieved a single user agent: "Example user agent"
ACTUAL -
Server retrieved two User-Agent headers:
- Java-http-client/11-ea
- Example user agent
---------- BEGIN SOURCE ----------
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
class Main {
public static void main(String[] args) throws IOException, InterruptedException {
var client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("https://httpbin.org/headers"))
.setHeader("User-Agent", "Example user agent")
.build();
System.out.println(client.send(request, BodyHandlers.ofString()).body());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use a library that does it correctly.
FREQUENCY : always