使用 HttpClient 对同一客户端的特定请求禁用重定向
Disable redirect for specific requests with the same client using HttpClient
我想知道如何在使用 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);
}
}
您可以实现自己的 RedirectStrategy
来根据需要处理重定向,并使用 setRedirectStrategy
或 HttpClientBuilder
让 http 客户端使用您的重定向策略。
您可以检查 DefaultRedirectStrategy and LaxRedirectStrategy 实现以供参考。
重要的部分是 RedirectStrategy
的 isRedirected
方法。您需要 return true
或 false
取决于您是否要重定向特定请求。 Http 请求执行器 will be calling 此方法在执行实际重定向之前。
例如,您可以扩展 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
...
}
}
我想知道如何在使用 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);
}
}
您可以实现自己的 RedirectStrategy
来根据需要处理重定向,并使用 setRedirectStrategy
或 HttpClientBuilder
让 http 客户端使用您的重定向策略。
您可以检查 DefaultRedirectStrategy and LaxRedirectStrategy 实现以供参考。
重要的部分是 RedirectStrategy
的 isRedirected
方法。您需要 return true
或 false
取决于您是否要重定向特定请求。 Http 请求执行器 will be calling 此方法在执行实际重定向之前。
例如,您可以扩展 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
...
}
}