Salut à tous!

Je fais des tests et j'ai un petit soucis avec HTTPClient et le basic auth (utilisation de l'authenticator) que je ne comprends pas :

Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
      // DECLARE AUTHENTICATOR
      final var authenticator = new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(USERNAME, USERPASSWORD.toCharArray());
        }
      };
 
      // DECLARE CLIENT
      final var client = HttpClient.newBuilder()
          .authenticator(authenticator)
          .connectTimeout(Duration.ofSeconds(10))
          .build();
 
      // BUILD REQUEST
      final var request =
          HttpRequest
              .newBuilder(URI.create(HOST + "/test"))
              .header("Content-Type", "text/plain")
              .POST(BodyPublishers.ofString("test message"))
              .build();
 
      // SEND REQUEST
      client
          .sendAsync(request, BodyHandlers.ofString())
          .thenApply(HttpResponse::statusCode)
          .thenAccept(System.out::println)
          .get();
et a l'execution j'ai l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
java.io.IOException: HTTP/1.1 header parser received no bytes
...
Caused by: java.io.EOFException: EOF reached while reading

J'ai essayé de changer la version du client HTTP_1_1 / HTTP_2. Ca ne change rien. Mon authenticator est foireux

Pour l'instant j'ai contourné le soucis en ajoutant la ligne suivante a ma requete :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
     .header("Authorization", buildBasicAuthHeader(USERNAME, USERPASSWORD))
Note : buildBasicAuthHeader retourne "Basic base64duLongwd"

mais je trouve ca deguelasse

avez vous une idée de ce qu'il se passe ?

(testé avec java 15 / 13 et 11)


Par avance merci pour vos retours