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. sqlmap中##和$$的区别

    一. 主要区别 #a# //解析sqlmap配置文件时自动加单引号,即'a' $a$ //解析sqlmap配置文件时不加单引号,即a 如果传进来的条件需要order by的话,那一定用第二种 #是把传 ...

  2. python 爬虫入门案例----爬取某站上海租房图片

    前言 对于一个net开发这爬虫真真的以前没有写过.这段时间开始学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSou ...

  3. Spring.Net---4、IoC/DI注入方式

    spring.net里实现了控制反转IOC(Inversion of control),也即依赖注入DI(Dependency Injection),以达到解耦的目的,实现模块的组件化.程序在调用sp ...

  4. C# AJAXform上传图片

     前台: @{    Layout = null;} <!DOCTYPE html> <html><head>    <meta name="vie ...

  5. java自学-编程入门

    java语言写的代码需要先编译为可执行文件,才能被jvm执行.在下载的jdk安装目录下的bin目录,有两个可执行程序java.exe和javac.exe,javac就是用来编译的,java是执行编译后 ...

  6. Java - “JUC”原子类

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...

  7. K:求取数组中最大连续子序列和的四个算法

    相关介绍:  求取数组中最大连续子序列和问题,是一个较为"古老"的一个问题.该问题的描述为,给定一个整型数组(当然浮点型也是可以的啦),求取其下标连续的子序列,且其和为该数组的所有 ...

  8. C#画个控件,指定字符特殊颜色显示

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. hashlib 文件校验,MD5动态加盐返回加密后字符

    hashlib 文件校验 # for循环校验 import hashlib def check_md5(file): ret = hashlib.md5() with open(file, mode= ...

  10. [COCI2006-2007#1] Bond

    状压DP \(dp[i]\)表示当前选人状态为\(i\)且选择了前\(i.count()\)个物品时最大的概率 #include"cstdio" #include"cst ...