使用HttpClient禁用同一客户端的特定请求重定向

时间:2019-01-15 13:44:54

标签: java apache-httpclient-4.x apache-httpcomponents

我想知道在使用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 :(得分:13)

您可以实现自己的RedirectStrategy来根据需要处理重定向,并使用setRedirectStrategy中的HttpClientBuilder来让http客户端使用您的重定向策略。

您可以检查DefaultRedirectStrategyLaxRedirectStrategy的实现方式以供参考。

重要的部分是isRedirected的{​​{1}}方法。您需要返回RedirectStrategytrue,具体取决于是否要重定向特定的请求。 Http请求执行程序will be calling会在实际重定向之前使用此方法。

例如,您可以扩展false并覆盖DefaultRedirectStrategy方法

isRedirected