[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17636672#comment-17636672
 ] 

Oleg Kalnichevski commented on HTTPCLIENT-2249:
-----------------------------------------------

[~jenschude] Please test / review the proposed fix [1]. The commit your 
referring to is not to blame for the regression. 

Oleg

[1] 
https://github.com/apache/httpcomponents-client/commit/345726a11ec210780ef0aa9d674d34685c78aac6

> Regression in HTTP client/core
> ------------------------------
>
>                 Key: HTTPCLIENT-2249
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2249
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (async)
>    Affects Versions: 5.2
>            Reporter: Jens Schulze
>            Priority: Major
>
> This commit 
> [https://github.com/apache/httpcomponents-core/commit/6741e3c555b96c4a64358adcb69aa0fddeb735b1]
>  introduced a regression in either Core or Client.
> It leads to failing requests with "ProtocolException: Header `Host` is 
> illegal" also the initiating request didn't included the mentioned header. I 
> created a small reproducer:
> {code:java}
> package test.http.apachehttp;
> import java.util.concurrent.*;
> import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
> import org.apache.hc.client5.http.async.methods.SimpleResponseConsumer;
> import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
> import org.apache.hc.client5.http.impl.async.HttpAsyncClientBuilder;
> import org.apache.hc.core5.concurrent.FutureCallback;
> import org.apache.hc.core5.http.nio.AsyncRequestProducer;
> import org.apache.hc.core5.http.nio.support.AsyncRequestBuilder;
> public class HttpTest {
>     //    @Test
>     public void reproduceHostError() {
>         final Executor executor = new ForkJoinPool();
>         final CloseableHttpAsyncClient client = 
> HttpAsyncClientBuilder.create().build();
>         client.start();
>         AsyncRequestProducer p = 
> AsyncRequestBuilder.get("https://google.com";).build();
>         final SimpleHttpResponse response1 = execute(executor, client, 
> p).join();
>         final SimpleHttpResponse response2 = execute(executor, client, 
> p).join();
>         final SimpleHttpResponse response3 = execute(executor, client, 
> p).join();
>         //        final SimpleHttpResponse response4 = execute(executor, 
> client, p).join();
>         final int code = response1.getCode();
>     }
>     private CompletableFuture<SimpleHttpResponse> execute(Executor executor, 
> CloseableHttpAsyncClient client,
>             AsyncRequestProducer p) {
>         final CompletableFuture<SimpleHttpResponse> apacheResponseFuture = 
> new CompletableFuture<>();
>         client.execute(p, SimpleResponseConsumer.create(), new 
> FutureCallback<SimpleHttpResponse>() {
>             @Override
>             public void completed(SimpleHttpResponse result) {
>                 apacheResponseFuture.complete(result);
>             }
>             @Override
>             public void failed(Exception ex) {
>                 apacheResponseFuture.completeExceptionally(ex);
>             }
>             @Override
>             public void cancelled() {
>                 apacheResponseFuture.cancel(true);
>             }
>         });
>         return apacheResponseFuture.thenApplyAsync(simpleHttpResponse1 -> 
> simpleHttpResponse1, executor);
>     }
> }
> {code}
> The 3rd request will fail with the mentioned ProtocolException.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to