您的位置:首页 > 理论基础 > 计算机网络

使用HttpAsyncClient进行异步获取数据

2016-01-06 00:00 621 查看
package com.k.ctc.code.asynchttp;

import java.util.concurrent.CountDownLatch;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;

/**
* @author Kai
* @Date 2016-1-6 11:14:56
* @Desc
*/
public class AsyncClient {

public static void main(String[] args) throws Exception {
// 设置HTTP请求的超时配置
RequestConfig config = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000).build();
// 根据配置创建异步的HTTP客户端
CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom().setDefaultRequestConfig(config).build();

//运行客户端
httpclient.start();

//构建5个HTTPGET请求
HttpGet[] requests = new HttpGet[]{
new HttpGet("https://www.baidu.com/"),
new HttpGet("https://www.baidu.com/"),
new HttpGet("https://www.baidu.com/"),
new HttpGet("https://www.baidu.com/"),
new HttpGet("https://www.baidu.com/")};

//创建一个计数器
final CountDownLatch latch = new CountDownLatch(requests.length);
//循环请求
for (final HttpGet get : requests) {
httpclient.execute(get, new FutureCallback<HttpResponse>() {

@Override
public void completed(HttpResponse t) {
latch.countDown();
System.out.println("==================================");
System.out.println(t.getStatusLine());
}

@Override
public void failed(Exception excptn) {
latch.countDown();
System.out.println("HttpGet failed");
 
3ff8
;}

@Override
public void cancelled() {
latch.countDown();
System.out.println("HttpGet cancelled");
}
});
}
//等待5个都请求完成
latch.await();
System.out.println("Shutting down");
//关闭
httpclient.close();
}
}


以下是使用Maven引用的jar(并不知道是不是都有使用到):

<properties>
<httpclient.version>4.4</httpclient.version>
</properties>

<!-- HTTP CLIENT START -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
<version>${httpclient.version}</version>
</dependency>
<!-- HTTP CLIENT END -->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java HttpAsyncClient