Я знаю, что это очень странно, но в моем случае я хочу повторять запрос с дополнительным заголовком (фактически учетными данными) всякий раз, когда первый запрос получил статус 403 ...
Я настраивал HttpClient, как показано ниже, он работает для всех запросов GET, но завершился неудачей для запросов POST с приведенным ниже исключением.
.setServiceUnavailableRetryStrategy(new ServiceUnavailableRetryStrategy() {
@Override
public boolean retryRequest(HttpResponse response, int executionCount, HttpContext context) {
boolean shouldRetry = response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED
&& executionCount < 2;
if (shouldRetry) {
_logger.warn("Got 401 status, retry request with vmware-api-session-id header");
context.setAttribute(REQ_ATTR_USING_SESSIONID_HEADER, Boolean.TRUE);
} else {
context.removeAttribute(REQ_ATTR_USING_SESSIONID_HEADER);
}
return shouldRetry;
}
@Override
public long getRetryInterval() {
return 0;
}
})
.addInterceptorFirst(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException {
Boolean withSessionIdHeader = (Boolean) context
.getAttribute(REQ_ATTR_USING_SESSIONID_HEADER);
if (withSessionIdHeader == null || !withSessionIdHeader) {
if (_logger.isDebugEnabled()) {
_logger.debug("Removing vmware-api-session-id header");
}
request.removeHeaders(ServiceProxyController.SESSION_ID_HEADER_NAME);
}
}
})
И исключение:
Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:108)
at org.apache.http.impl.execchain.ServiceUnavailableRetryExec.execute(ServiceUnavailableRetryExec.java:85)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
... 51 common frames omitted
Я пытался изменить исходный запрос, чтобы пометить его как неиспользованный, но, похоже, он не разрешен ...
Мне интересно, есть ли еще какой-нибудь способ обойти это?
Заранее спасибо.