这个问题可能是由于在重试时没有重置POST实体引起的。解决方法是在定义ServiceUnavailableRetryStrategy时添加重置POST实体的代码。
示例代码:
CloseableHttpClient httpClient = HttpClients.custom() .setServiceUnavailableRetryStrategy(new ServiceUnavailableRetryStrategy() { @Override public boolean retryRequest(final HttpResponse response, final int executionCount, final HttpContext context) { int statusCode = response.getStatusLine().getStatusCode(); if (statusCode >= 400 && statusCode < 500) { // Do not retry 4xx errors return false; } if (statusCode == 503) { // Reset POST entity HttpUriRequest httpUriRequest = (HttpUriRequest) context.getAttribute(HttpCoreContext.HTTP_REQUEST); if (httpUriRequest instanceof HttpEntityEnclosingRequest) { HttpEntityEnclosingRequest httpEntityEnclosingRequest = (HttpEntityEnclosingRequest) httpUriRequest; HttpEntity httpEntity = httpEntityEnclosingRequest.getEntity(); if (httpEntity != null && httpEntity.isRepeatable()) { try { httpEntityEnclosingRequest.setEntity(new BufferedHttpEntity(httpEntity)); } catch (IOException e) { return false; } return true; } return false; } } return false; } @Override public long getRetryInterval() { return 1000; } }) .build();
上一篇:ApacheHttpclient4.5.13是否支持预认证?
下一篇:ApacheHttpClient4.5或JavaHttpsURLConnection-多个实例使用线程并行执行GET、POST操作导致时间增加