Заменить заголовок 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);

https://github.com/AsyncHttpClient/async-http-client/blob/master/client/src/main/java/org/asynchttpclient/netty/handler/intercept/ResponseFiltersInterceptor.java#L62

Другие вопросы по тегам