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. 《高质量c++/c编程指南》学习摘要

    1. 尽可能在定义变量的同时初始化该变量(就近原则)——防止忘记初始化,引用未被初始化的变量,可能导致程序错误 2. 代码行最大长度宜控制在70~80个字符以内(长行拆分)——否则眼睛看不过来,也不便 ...

  2. 《Think Python》第16章学习笔记

    目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...

  3. 超赞的 Go 语言 INI 文件操作

    灵活的数据源 不光光可以从文件读取配置,还支持 []byte 类型的纯数据读取和基于 io.ReadCloser 的流式读取. 多种格式兼容 各种文件种类的广泛支持,包括但不限于 my.cnf..gi ...

  4. Jquery 搜索框自动提示

    为文本框增加自动提示下拉功能,比如输入 1,则从后台数据库查询出包含1 的字段,在文本框增加下拉列表供用户选择 ajax 返回数据为搜索查询字段的json集合 <script src=" ...

  5. SQL Server中用While循环替代游标(Cursor)的解决方案

    By行处理数据,推荐2种方式: 1.游标 2.While循环 我们来了解下这两种方案处理1w行数据分别需要多长时间. 一.游标. 首先我们填充一个表,用优雅的递归方式填充. ,) ) ;with ct ...

  6. [转]深入Java单例模式

       文章从 https://blog.51cto.com/devbean/203501 转载 问题 : doble-check 实现的单例模式有什么缺点 线程安全的单例写法应该是怎么样的 概述 在G ...

  7. 如鹏网学习笔记(十二)HTML5

    一.HTML5简介 HTML5是HTML语言第五次修改产生的新的HTML语言版本 改进主要包括: 增加新的HTML标签或者属性.新的CSS样式属性.新的JavaScript API等.同时删除了一些过 ...

  8. 自定义Jquery插件——由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件

    由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件下面是代码: // 掉用方式支持 $('select').textBeauty(1 ...

  9. 基于SSH框架下登录验证码模块的实现

    1.前端页面代码: 主要以jQuery的ajax异步请求实现. ... <script type="text/javascript" src="${pageCont ...

  10. django框架中form表单Post方法无法提交 Forbidden (403) CSRF verification failed. Request aborted.

    问题如图: 解决方法: 在视图函数中引入并使用装饰器 from django.views.decorators.csrf import csrf_exempt @csrf_exempt