Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8203771

It's not possible to override default user agent with java.net.http HTTPClient

XMLWordPrintable

    • 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


            dfuchs Daniel Fuchs
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: