Заменить заголовок Location при использовании.setFollowRedirect(true) на aysnchttpclient
Я хотел бы заменить заголовок Location в одном состоянии. Я использую следующее, чтобы включить Redirect
client.prepareGet(request.getUrl())
.setFollowRedirect(true)
Что я сделал, так это расширил класс AsyncCompletionHandler, и оттуда я @Override onHeadersReceived(),
@Override
public State onHeadersReceived(final HttpResponseHeaders headers) throws Exception {
String location = headers.getHeaders().get("Location").replace("itmss", "https"
);
DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders();
httpHeaders.add(HEADER, location);
httpHeaders.add(headers.getHeaders());
return inner.onHeadersReceived(new HttpResponseHeaders(httpHeaders));
}
Тем не менее, я вижу, что запрос по-прежнему использует itms
вместо https
, что означает, что заголовок Location не заменяется.
Текущий план заключается в реализации перехватчика, который запускается до Redirect30xInterceptor.java
( https://github.com/AsyncHttpClient/async-http-client/blob/dd459294434a408cff3c65c9f5c402b82d60aaa2/client/src/main/java/org/asynchttpclient/netty/handler/intercept/Redirect30xInterceptor.java).
Другой план состоит в том, чтобы сделать цикл while для следующего кода, и при получении 3XX установить новый URL в следующем запросе.
client.prepareGet(request.getUrl())
.addHeader("User-Agent", request.getUserAgent())
.setProxyServer(proxyServer)
.execute(new ResponseAsyncCompletionHandler(request))
.toCompletableFuture();
Конечная цель - заменить itms://
в https://
, так что следующий запрос использует https
вместо itms
,
1 ответ
Изучив больше, охтпп легко поддерживает перехватчик.
Если вы хотите использовать AsyncHttp, это гораздо сложнее. Вы должны реализовать ResposeFilter, и оттуда вы измените запрос, и установите replayRequest(true), что означает, что сделан новый запрос.
пример кода
builder.request(new RequestBuilder(nextRequest).build()).replayRequest(true);