HttpClient学习(三)—— AsyncHttpClient使用
一、介绍
This class support asynchronous and synchronous HTTP requests.
AsyncHttpClient 支持同步、异步Http请求。
二、简单使用
引入依赖
<dependencies>
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>net.tascalate</groupId>
<artifactId>net.tascalate.concurrent</artifactId>
<version>0.8.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
执行同步请求
/**
* 执行同步HTTP请求
*/
public void synRequest() {
String url = "http://www.baidu.com";
AsyncHttpClient c = new DefaultAsyncHttpClient();
Future<Response> f = c.prepareGet(url).execute();
try {
System.out.println(f.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
执行异步请求
/**
* 执行异步HTTP请求
*/
public void asyncRequest() {
String url = "http://www.baidu.com";
AsyncHttpClient c = new DefaultAsyncHttpClient();
Future<Response> f = c.prepareGet(url).execute(new AsyncCompletionHandler<Response>() {
// onCompleted method will be invoked once the http response has been fully read.
//一旦完全读取Http响应,就调用onCompleted方法
//Response object includes the http headers and the response body.
//Response 对象包括HTTP请求头和响应体
@Override
public Response onCompleted(Response response) throws Exception {
System.out.println("完成请求");
return response;
}
@Override
public void onThrowable(Throwable t) {
System.out.println("出现异常");
super.onThrowable(t);
}
});
try {
Response response = f.get();
System.out.println(response.getResponseBody());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
配置
private AsyncHttpClient client = asyncHttpClient(
new DefaultAsyncHttpClientConfig.Builder()
.setFollowRedirect(true)
.setProxyServerSelector(new ProxySelector())
.setIoThreadsCount(Runtime.getRuntime().availableProcessors() * 2)
.setConnectTimeout(1000)
.setReadTimeout(1000)
.setRequestTimeout(3000)
.setMaxRequestRetry(2)
.setThreadPoolName("ASYNC-CLIENT")
);
private class ProxySelector implements ProxyServerSelector {
@Override
public ProxyServer select(Uri uri) {
//从代理池中获取HttpHost
final HttpHost proxy = getProxy(uri.getHost());
if (proxy == null) {
return null;
}
final ProxyServer.Builder builder = new ProxyServer.Builder(proxy.getHostName(), proxy.getPort());
return builder.build();
}
}
参考文档
《AsyncHttpClient 官方文档》
HttpClient学习(三)—— AsyncHttpClient使用的更多相关文章
- HttpClient学习整理
HttpClient简介HttpClient 功能介绍 1. 读取网页(HTTP/HTTPS)内容 2.使用POST方式提交数据(httpClient3) 3. 处理页面重定向 ...
- HttpClient 学习整理【转】
转自 http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的 ...
- HttpClient 学习整理 (转)
source:http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html HttpClient 是我最近想研究的东西,以前想过的一些应用没能 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
- TweenMax动画库学习(三)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化
1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点
深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...
- SVG 学习<三>渐变
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
随机推荐
- requests模块的基本用法
requests 什么是requests模块 python中封装好的一个基于网络请求的模块 作用 用来模拟浏览器发送请求 环境安装 pip install requests 编码流程 指定 url 发 ...
- UI5-技术篇-jQuery.ajax执行过程中Token验证及JSON格式传值问题
最近两天在测试OData服务类方法CREATE_DEEP_ENTITY及GET_EXPANDED_ENTITYSET,刚开始采用ODataModel方式调用没有任何问题,但是ODataModel采用的 ...
- Matplotlib pyplot中title() xlabel() ylabel()无法显示中文(即显示方框乱码)的解决办法
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/11020246.html 一.无法正常显示原因 ...
- Django 启动报错 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7
pycharm 报错 cmd 报错 解决办法 首先 是计算机 编码问题 是 django 读取你的 用户host名 但是 windos 用户名 如果是中文 就会报这个错 要改成 英文
- CentOS7.X+LAMP环境下安装zabbix4.X
1.安装zabbix仓库 rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noar ...
- CEIWEI CommTone串口调试精灵7.1 串口调试 串口工具
CEIWEI CommTone串口调试精灵 是一款功能强大的串行端口通信调试软件,内嵌超过100种标准的CRC校验功能,并支校验结果高低位字节前导转换:支持批量协议调试,并支持文件.16进制.UN ...
- 基于fastai的分类网络
classify.fastai Classifier based on fastai 欢迎访问:https://github.com/pprp/classify.fastai/ 字符识别分类器-基于f ...
- LRU(最近最少使用)(python实现)
""" python3 only LRU cache """ from collections import OrderedDict fro ...
- 《ABCD组》第四次作业:项目需求调研与分析
<ABCD组>第四次作业:项目需求调研与分析 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https:// ...
- 对linux下日志文件error监控
对日志文件中的error进行监控,当日志文件中出现error关键字时,就截取日志(grep -i error 不区分大小写进行搜索"error"关键字,但是会将包含error大小写 ...