内容简介:如何使用Apache HttpClient 4取消HTTP请求。这对于可能长时间运行的请求或大型下载文件尤其有用,否则这些请求将不必要地消耗带宽和连接。要中止正在进行的请求,客户端可以简单地使用:
如何使用Apache HttpClient 4取消HTTP请求。
这对于可能长时间运行的请求或大型下载文件尤其有用,否则这些请求将不必要地消耗带宽和连接。
中止GET请求
要中止正在进行的请求,客户端可以简单地使用:
request.abort(); 复制代码
这将确保客户端不必使用整个请求来释放连接:
@Test
public void test()
throws ClientProtocolException, IOException {
HttpClient instance = HttpClients.custom().build();
HttpGet request = new HttpGet(SAMPLE_URL);
HttpResponse response = instance.execute(request);
try {
System.out.println(response.getStatusLine());
request.abort();
} finally {
response.close();
}
}
复制代码
禁止重定向
默认情况下,遵循HTTP规范,HttpClient将自动遵循重定向
对于某些用例来说,这可能是完全没问题的,但肯定会出现不需要的用例 。现在我们将看看如何更改默认行为并停止重定向。
在HttpClient 4.3之前
在旧版本的HttpClient(4.3之前)中,我们可以配置客户端使用重定向执行的操作,如下所示:
@Test
public void test()
throws ClientProtocolException, IOException {
DefaultHttpClient instance = new DefaultHttpClient();
HttpParams params = new BasicHttpParams();
params.setParameter(ClientPNames.HANDLE_REDIRECTS, false);
// HttpClientParams.setRedirecting(params, false); // alternative
HttpGet httpGet = new HttpGet("http://localhost:8080");
httpGet.setParams(params);
CloseableHttpResponse response = instance.execute(httpGet);
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
复制代码
请注意可用于配置重定向行为的备用API,而不使用设置实际原始http.protocol.handle-redirects参数:
HttpClientParams.setRedirecting(params, false); 复制代码
另请注意,如果禁用了后续重定向,我们现在可以检查Http响应状态代码是否确实是301 Moved Permaned - 应该是这样。
在HttpClient 4.3之后
HttpClient 4.3引入了更清晰,更高级的API来构建和配置客户端:
@Test
public void test()
throws ClientProtocolException, IOException {
HttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
HttpResponse response = instance.execute(new HttpGet("http://localhost:8080"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
复制代码
PS:新API使用此重定向行为配置整个客户端 - 而不仅仅是单个请求。
自定义Hearder
根据要求设置Hearder(4.3及以上)
HttpClient 4.3引入了一种构建请求的新API--RequestBuilder。要设置Header,我们将在构建器上使用setHeader方法:
HttpClient client = HttpClients.custom().build(); HttpUriRequest request = RequestBuilder.get() .setUri(SAMPLE_URL) .setHeader(HttpHeaders.CONTENT_TYPE, "application/json") .build(); client.execute(request); 复制代码
根据要求设置Hearder(4.3之前)
在HttpClient 4.3之前的版本中,我们可以在请求上使用简单的setHeader调用设置任何自定义标头:
HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(SAMPLE_URL); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); client.execute(request); 复制代码
我们可以看到,我们将Content-Type直接在请求上设置为自定义值--JSON。
在客户端上设置默认标头
我们还可以将其配置为客户端本身的默认标头,而不是在每个请求上设置标头:
Header header = new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json"); List<Header> headers = Lists.newArrayList(header); HttpClient client = HttpClients.custom().setDefaultHeaders(headers).build(); HttpUriRequest request = RequestBuilder.get().setUri(SAMPLE_URL).build(); client.execute(request); 复制代码
当所有请求的标头需要相同时(例如自定义应用程序标头),这非常有用。
小结
本文介绍了HttpClient中的中断请求,禁止跟踪HTTP重定向,自定义Header知识,希望对你有所帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Uberland
Alex Rosenblat / University of California Press / 2018-11-19 / GBP 21.00
Silicon Valley technology is transforming the way we work, and Uber is leading the charge. An American startup that promised to deliver entrepreneurship for the masses through its technology, Uber ins......一起来看看 《Uberland》 这本书的介绍吧!