Отключить перенаправление для определенных запросов с одним и тем же клиентом, используя HttpClient - PullRequest
0 голосов
/ 15 января 2019

Хотелось бы узнать, как можно отключить перенаправление для определенных запросов при использовании HttpClient. Прямо сейчас мой клиент разрешает или запрещает перенаправления для всех своих запросов. Я хочу иметь возможность делать некоторые запросы с перенаправлениями, но некоторые с отключенным перенаправлением, все с тем же клиентом. Возможно ли это?

Пример использования двух клиентов (это то, чего я хочу избежать):

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;

public class MyClass {

    public static void main(String[] args) throws Exception {

        // Redirected client
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet get = new HttpGet("http://www.google.com");
        client.execute(get);

        // Non-redirected client
        CloseableHttpClient client2 = HttpClientBuilder.create().disableRedirectHandling().build();
        HttpGet get2 = new HttpGet("http://www.google.com");
        client2.execute(get2);
    }
}

1 Ответ

0 голосов
/ 18 января 2019

Вы можете реализовать свой собственный RedirectStrategy для обработки перенаправления по своему усмотрению и использовать setRedirectStrategy из HttpClientBuilder, чтобы позволить клиенту http использовать вашу стратегию перенаправления.

Вы можете проверить DefaultRedirectStrategy и LaxRedirectStrategy реализации для справки.

Важной частью является isRedirected метод RedirectStrategy. Вам необходимо вернуть true или false в зависимости от того, хотите ли вы перенаправить конкретный запрос или нет. Исполнитель Http-запроса будет вызывать этот метод перед выполнением фактического перенаправления.

Например, вы можете расширить DefaultRedirectStrategy и переопределить isRedirected метод

...
public class MyRedirectStrategy extends DefaultRedirectStrategy {
...
    @Override
    public boolean isRedirected(
        final HttpRequest request,
        final HttpResponse response,
        final HttpContext context) throws ProtocolException {
        // check request and return true or false to redirect or not
    ...
    }
}
...