一、介绍

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使用的更多相关文章

  1. HttpClient学习整理

    HttpClient简介HttpClient 功能介绍    1. 读取网页(HTTP/HTTPS)内容    2.使用POST方式提交数据(httpClient3)    3. 处理页面重定向    ...

  2. HttpClient 学习整理【转】

    转自 http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的 ...

  3. HttpClient 学习整理 (转)

    source:http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html HttpClient 是我最近想研究的东西,以前想过的一些应用没能 ...

  4. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  5. TweenMax动画库学习(三)

    目录               TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)           ...

  6. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

  7. 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化

    1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...

  8. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  9. [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点

    深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...

  10. SVG 学习<三>渐变

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

随机推荐

  1. vue锚点

    第一种: router.js中添加 mode: 'history', srcollBehavior(to,from,savedPosition){ if(to.hash){ return { sele ...

  2. Fatal error:Call to undefined function mysqli_connect() in .php line 报错

    这样的问题,多半是PHP配置问题. 修改php配置文件 1.在php(版本:php-7.2.7-Win32-VC15-x64)文件夹中一开始不会看到php.ini,而是php.ini-developm ...

  3. STM8 内部flash

    举例 typedef enum { FLASH_MEMTYPE_PROG = (u8)0x00, /*!< Program memory */ FLASH_MEMTYPE_DATA = (u8) ...

  4. stm32 内部flash

    嵌入式闪存 闪存存储器有主存储块和信息块组成 大容量产品主存储块最大为64K×64位,每个存储块划分为256个2K字节的页 编程和擦除闪存 闪存编程一次可以写入16位(半字) 闪存擦除操作可以按页面擦 ...

  5. Linux下安装php开发环境

    先记录下以恶搞教程,回头自己更 https://my.oschina.net/hhly/blog/1547227

  6. Android笔记(十五) Android中的基本组件——单选框和复选框

    单选框和多选框通常用来在设置用户个人资料时候,选择性别.爱好等,不需要用户直接输入,直接在备选选项中选择,简单方便. 直接看代码: <?xml version="1.0" e ...

  7. 15 Windows编程——系统内置窗口子类型之button

    button子类型BS_3STATE.BS_AUTO3STATE.BS_AUTOCHECKBOX 源码 #include<Windows.h> #include<Windowsx.h ...

  8. Java中的经典算法之快速排序(Quick Sort)

    Java中的经典算法之快速排序(Quick Sort) 快速排序的思想 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对 ...

  9. Windows 对外开放端口号

    前记 今天在做 Kafka 消息传输时,本地连接服务器的 Kafka 出现问题.连接不上,想到新的服务器应该是防火墙关闭所致. 我呢,就用了最直接暴力的方法:关闭防火墙~~~~(哈哈哈) 问题是解决了 ...

  10. php版网站站打包程序【配合webshell】(原创)

    因为大马只能下载一些单文件,无法下载文件夹里的文件,所以花费一些时间写了一个PHP脚本,打包全站数据,在此分享!切勿做违法事情! 使用方法: 1.将该程序上传到网站的目录下,如/zip.php : 2 ...