HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。示例:发送Post/Get请求接口。

依赖包

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.3.6</version>

</dependency>

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient-cache</artifactId>

<version>4.3.6</version>

</dependency>

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpmime</artifactId>

<version>4.3.6</version>

</dependency>

代码示例:

HttpClient连接池

/**

* http连接池

* Created by liujia68 on 2018/11/15

*/

public class HttpClientUtils {

private static PoolingHttpClientConnectionManager connectionManager;//连接池管理类

private static HttpClientBuilder httpBuilder;

static RequestConfig requestConfig;

private static int MAXCONNECTION = 10;

private static int DEFAULTMAXCONNECTION = 5;

//static String IP = "cnivi.com.cn";

//private static int PORT = 80;

static String IP = "172.28.91.145";

private static int PORT = 8080;

static {

//设置http的状态参数

requestConfig = RequestConfig.custom()

.setConnectTimeout(5000)//一、连接超时:connectionTimeout-->指的是连接一个url的连接等待时间

.setSocketTimeout(5000)// 二、读取数据超时:SocketTimeout-->指的是连接上一个url,获取response的返回等待时间

.setConnectionRequestTimeout(5000)//三、从连接池获取连接的超时,如果连接池里连接都被用了,且超过这个时间,会抛出超时异常

.build();

HttpHost target = new HttpHost(IP, PORT);

connectionManager = new PoolingHttpClientConnectionManager();

connectionManager.setMaxTotal(MAXCONNECTION);//客户端总并行链接最大数

connectionManager.setDefaultMaxPerRoute(DEFAULTMAXCONNECTION);//每个主机的最大并行链接数

connectionManager.setMaxPerRoute(new HttpRoute(target), 20);///设置到每个路由的最大连接数

httpBuilder = HttpClients.custom();

httpBuilder.setConnectionManager(connectionManager);

}

static CloseableHttpClient getConnection() {

CloseableHttpClient httpClient = httpBuilder.build();

return httpClient;

}

static void dealResult(CloseableHttpResponse response) {

if (response.getStatusLine().getStatusCode() == 200) {

HttpEntity entity = response.getEntity();

String message = null;

try {

message = EntityUtils.toString(entity, "utf-8");

} catch (IOException e) {

e.printStackTrace();

}

System.out.println(message);

} else {

System.out.println("请求失败");

}

}

}

测试类

public class test {

private static void testPost() throws Exception{

CloseableHttpClient client = getConnection();

//URL+入参requestParam

URIBuilder uriBuilder = new URIBuilder("http://www.sogou.com/web");

uriBuilder.addParameter("query","花千骨");

//requestBody

List<NameValuePair> formparams = new ArrayList<NameValuePair>();

formparams.add(new BasicNameValuePair("account", ""));

formparams.add(new BasicNameValuePair("password", ""));

HttpEntity reqEntity = new UrlEncodedFormEntity(formparams, "utf-8");

HttpPost post = new HttpPost(uriBuilder.build());//URL+入参requestParam

post.setEntity(reqEntity); //requestBody

post.setConfig(requestConfig);

CloseableHttpResponse response = client.execute(post);

dealResult(response);

response.close();

client.close();

}

private static void testGet(){

try (CloseableHttpClient httpClient = getConnection()){

//URL+入参requestParam

URIBuilder uriBuilder = new URIBuilder("http://172.28.91.145:8080/bp-query-service");

uriBuilder.addParameter("sid","gx");

uriBuilder.addParameter("curTime","20181115");

uriBuilder.addParameter("queryType","TUV");

uriBuilder.addParameter("dataRule","byTotal");

uriBuilder.addParameter("appid","1");

uriBuilder.addParameter("clientid","1");

uriBuilder.addParameter("conditionTabs","");

HttpGet httpget = new HttpGet(uriBuilder.build());//URL+入参requestParam

httpget.setConfig(requestConfig);

CloseableHttpResponse response = httpClient.execute(httpget);

dealResult(response);

response.close();

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (URISyntaxException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

HttpClient简述的更多相关文章

  1. HttpClient I/O exception (java.net.SocketException) caught when processing request: Connect

    转自:http://luan.iteye.com/blog/1820054 I/O exception (java.net.SocketException) caught when processin ...

  2. Asp.Net Core中HttpClient的使用方式

    在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数.使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变 ...

  3. 简述 Spring Cloud 是什么1

    很多同学都了解了Spring ,了解了 Spring Boot, 但对于 Spring Cloud 是什么还是比较懵逼的. 本文带你简单的了解下,什么是Spring Cloud. Spring Clo ...

  4. 微服务指南走北(三):Restful API 设计简述

    API的定义取决于选择的IPC通信方式,假设是消息机制(如 AMQP 或者 STOMP).API则由消息频道(channel)和消息类型.假设是使用HTTP机制,则是基于请求/响应(调用http的ur ...

  5. JAVA WEB接口开发简述

    目录 1. JAVA WEB接口开发简述 1.1. 基本了解 1.2. 提供接口 1.3. 调用接口 1. JAVA WEB接口开发简述 1.1. 基本了解 当我们想去访问其他网站的接口时候,而又不想 ...

  6. HttpClientFactory 使用说明 及 对 HttpClient 的回顾和对比

    目录 HttpClient 日常使用及坑点: HttpClientFactory 优势: HttpClientFactory 使用方法: 实战用法1:常规用法 1. 在 Startup.cs 中进行注 ...

  7. ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  8. 【C#多线程】2.线程池简述+两种传统的异步模式

    线程池简述+两种传统的异步编程模式 1.线程池简述 首先我们要明确一点,编程中讲的线程与平时我们形容CPU几核几线程中的线程是不一样的,CPU线程是指逻辑处理器,比如4核8线程,讲的是这个cpu有8个 ...

  9. JDK HttpClient 单次请求的生命周期

    HttpClient 单次请求的生命周期 目录 HttpClient 单次请求的生命周期 1. 简述 2. uml图 3. Http连接的建立.复用和降级 3.1 调用流程及连接的建立和复用 3.2 ...

随机推荐

  1. windows下python2.7版本numpy,Scipy,matplotlib,sklearn安装

    系统是windows32位,安装了python2.7.13. 安装顺序就是numpy,Scipy,matplotlib,sklearn. 首先是更新一下pip (确保pip能使用) 然后将setupt ...

  2. iOS选择相片优化

    1.问题 在ios中有时需要选择本地图片或者拍照,有时候选择相片的时候会有多选和单选,所以需要首先封装相册选择,在之前的博客中也有写到IOS多选单选相册图片.这个只是对相册中选择图片的封装.我们在ap ...

  3. nginx timeout 配置 全局timeout 局部timeout web timeout

    nginx比较强大,可以针对单个域名请求做出单个连接超时的配置. 比如些动态解释和静态解释可以根据业务的需求配置 proxy_connect_timeout :后端服务器连接的超时时间_发起握手等候响 ...

  4. 【C#】RGB转CMYK

    由于目前印兔项目中的在线设计功能设计出来的产品颜色模式不确定,但是客户设计出来的产品需要发送到印厂的客户端去下载并且印刷,只有CMYK颜色模式的产品才能正确印刷,所以需要判断产品的颜色模式是否为CMY ...

  5. visual studio清理nuget包缓存

    最近在使用nuget包的时候发现一个问题.昨天我组长明明发了一个新版本的包上去,可在我电脑上死活找不到这个新版本的包.刷新,重启vs,重启电脑,好长时间才出来.今天又碰到这个问题了,在同事电脑上都能搜 ...

  6. 浏览器获取正确的scrollTop值

    window.pageYOffset 被所有浏览器支持除了 IE 6, IE 7, IE 8, 不关doctype的事, 注IE9 开始支持此属性. window.scrollY 被Firefox, ...

  7. 九、curator recipes之不可重入锁InterProcessSemaphoreMutex

    简介 recipes的InterProcessSemaphoreMutex是一种不可重入的互斥锁,也就意味着即使是同一个线程也无法在持有锁的情况下再次获得锁,所以需要注意,不可重入的锁很容易在一些情况 ...

  8. visualvm 插件 visual gc 使用介绍

    visual gc 是 visualvm 中的图形化查看 gc 状况的插件. 具体详细介绍可参照: http://www.oracle.com/technetwork/java/visualgc-13 ...

  9. 最短路问题(dijkstral 算法)(优化待续)

    迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向 ...

  10. K:逆波兰算法

    相关介绍:  一种求解字符串形式的表达式的结果的算法,该算法在求解时,需要先将我们平日里习惯上使用的中序表达式的模式转化为等价的后序(后缀)表达式的模式,之后再通过求解出该后序(后缀)表达式的结果而得 ...