[ https://issues.apache.org/jira/browse/HTTPCLIENT-2243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17626940#comment-17626940 ]
youngzil commented on HTTPCLIENT-2243: -------------------------------------- Sorry, I used 5.1.2 at first. After I found this problem, I upgraded to 5.1.3. Maybe I forgot to reimport and it didn't take effect. Thank you very much.(y) [[olegk|https://issues.apache.org/jira/secure/ViewProfile.jspa?name=olegk]]([https://issues.apache.org/jira/secure/ViewProfile.jspa?name=olegk]) > DefaultHttpRequestRetryStrategy Retrying the request without sending the body > causes the connection to time out > --------------------------------------------------------------------------------------------------------------- > > Key: HTTPCLIENT-2243 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2243 > Project: HttpComponents HttpClient > Issue Type: Bug > Components: HttpClient (async) > Affects Versions: 5.1.3 > Reporter: youngzil > Priority: Major > > Apache httpclient 5.1.3 not sending POST data on retry via > DefaultHttpRequestRetryStrategy > > I didn't set any retry strategy for CloseableHttpAsyncClient, so use default > retry strategy DefaultHttpRequestRetryStrategy、 > I am making a POST call to the server with JSON payload in SimpleHttpRequest. > I call the execute method like public final Future<SimpleHttpResponse> > execute(final SimpleHttpRequest request,final > FutureCallback<SimpleHttpResponse> callback) > When server returns with "429 Too Many Requests" the retry strategy kicks in > and makes another retry request . > I have enabled the logs and what I observe is, in the first request the JSON > payload is sent properly. But on the retry request no payload is sent to the > server and I am receiving a "400 Bad Request". > Through the tracking code, the reasons are found as follows: > Eventually a SimpleRequestProducer.create(request) will be created that > contains a dataProducer and the dataProducer has the requested body, and > BasicAsyncEntityProducer.isRepeatable return true > The first request will call > org.apache.hc.core5.http.nio.entity.BasicAsyncEntityProducer#produce to > launch the body > When initiating a retry request, calling > org.apache.hc.core5.http.nio.entity.BasicAsyncEntityProducer#produce again > the body will not be sent again, because bytebuf.hasRemaining() returns false > This looks like a problem > BasicAsyncEntityProducer isRepeatable but the produce method cannot be called > repeatedly > thanks -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org