我想知道在使用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);
}
}
答案 0 :(得分:13)
您可以实现自己的RedirectStrategy
来根据需要处理重定向,并使用setRedirectStrategy
中的HttpClientBuilder
来让http客户端使用您的重定向策略。
您可以检查DefaultRedirectStrategy和LaxRedirectStrategy的实现方式以供参考。
重要的部分是isRedirected
的{{1}}方法。您需要返回RedirectStrategy
或true
,具体取决于是否要重定向特定的请求。 Http请求执行程序will be calling会在实际重定向之前使用此方法。
例如,您可以扩展false
并覆盖DefaultRedirectStrategy
方法
isRedirected