目录

HttpClient 概述与下载

Http Get 请求

Http POST 请求

Http Put 请求

Http Delete 请求

异步执行请求


HttpClient 概述与下载

1、本文的 HttpClient 是指 Apache 官网 HttpComponents 项目下的子项目 HttpClient 。

2、如果项目使用手动导入 Jar 包的方式,则可以从官网下载,地址:http://hc.apache.org/downloads.cgi

3.1、Maven 依赖:如果是 Maven 项目,则可以从 Maven 中央仓库获取依赖,如果不需要做文件上传,或者异步请求操作,则可以只导入 httpclient 依赖:

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>

3.2、如果需要做文件上传,或者异步请求操作,则需要导入 httpasyncclient、httpmime 依赖:

        <!--httpclient 异步请求客户端依赖,内部包含:httpclient、httpcore 依赖--><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpasyncclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpasyncclient</artifactId><version>4.1.4</version></dependency><!---httpclient 文件上传依赖--><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.13</version><exclusions><exclusion><artifactId>httpclient</artifactId><groupId>org.apache.httpcomponents</groupId></exclusion></exclusions></dependency>

4、使用 HttpClient 发送请求主要分为以下几步:

  • 创建 CloseableHttpClient(同步) 对象或 CloseableHttpAsyncClient(异步) 对象

  • 创建 Http 请求对象

  • 调用 execute 方法执行请求,如果是异步请求在执行之前需调用 start 方法

5、HTTP 协议是一个广泛应用的 Internet 协议,提供了8个不同的请求方式(常见的是前 4 个):

请求方式 描述
GET  向特定资源发出请求(请求指定页面信息,并返回实体主体)
POST 向指定资源提交数据进行处理请求(提交表单、上传文件)
PUT 向指定资源位置上上传其最新内容
DELETE 请求服务器删除指定的资源
HEAD
OPTIONS
TRACE
CONNECT

Http Get 请求

1、get 请求通常适用于请求对方的资源,或者类似做心跳的功能,如果是做有大量数据需要传输给对方时,应该采用 post 方式。

2、使用步骤:

//1、创建 CloseableHttpClient 同步请求对象
CloseableHttpClient httpClient = HttpClientBuilder.create().build();// 2、HttpGet(final String uri):创建 http get 请求对象
HttpGet httpGet = new HttpGet(url);// 3、设置超时时间、请求时间、socket 时间都为 15 秒,允许重定向
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(15000).setConnectionRequestTimeout(15000).setSocketTimeout(15000).setRedirectsEnabled(true).build();
httpGet.setConfig(requestConfig);// 4、CloseableHttpResponse execute(final HttpUriRequest request):执行请求
// 如果连接不上服务器,则抛出:java.net.ConnectException: Connection refused: connect
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);// 5、获取响应结果, 状态码 200 表示请求成功
int statusCode = httpResponse.getStatusLine().getStatusCode();
System.out.println("响应状态码:" + statusCode);
if (statusCode == 200) {HttpEntity httpEntity = httpResponse.getEntity();// 使用指定的字符编码解析响应消息实体String feedback = EntityUtils.toString(httpEntity,"UTF-8");System.out.println("feedback:" + feedback);
}

3、在线演示源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/apachestudy/httpclient/HttpGetTest.java

Http POST 请求

1、向指定资源提交数据进行处理请求(提交表单、上传文件),使用步骤:

//1、创建 CloseableHttpClient 同步请求对象
httpClient = HttpClientBuilder.create().build();// 2、HttpPost(final String uri):创建 http post 请求对象, 设置请求头信息
String url = "https://news.ssp.qq.com/app";
httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "application/json;charset=utf8");// 3、设置 post 请求正文参数
String postParams = "{\"adReqData\":{\"chid\":9,\"adtype\":0,\"uin\":null,\"qq_openid\":\"\",\"slot\":[{\"loid\":\"1\",\"cur\":0,\"channel\":\"world\",\"orders_info\":[],\"article_id\":\"\",\"refresh_type\":1,\"current_rot\":\"\",\"seq\":\"\",\"seq_loid\":\"\"}],\"netstatus\":\"unknown\",\"pf\":\"pc\",\"appversion\":\"200717\",\"plugin_news_cnt\":20,\"plugin_page_type\":\"\",\"plugin_text_ad\":false,\"plugin_bucket_id\":\"\"}}";
httpPost.setEntity(new StringEntity(postParams, "UTF-8"));// 4、CloseableHttpResponse execute(final HttpUriRequest request):执行请求
// 如果连接不上服务器,则抛出:java.net.ConnectException: Connection refused: connect
httpResponse = httpClient.execute(httpPost);// 5、获取响应结果, 状态码 200 表示请求成功
int statusCode = httpResponse.getStatusLine().getStatusCode();
System.out.println("响应状态码:" + statusCode);
if (statusCode == 200) {HttpEntity httpEntity = httpResponse.getEntity();// 使用指定的字符编码解析响应消息实体String feedback = EntityUtils.toString(httpEntity, "UTF-8");System.out.println("feedback:" + feedback);
}

2、在线演示源码:

https://github.com/apache-study/java/com/wmx/apachestudy/httpclient/HttpPostTest.java

https://github.com/apache-study/java/com/wmx/apachestudy/controller/ResourceController.java

Http Put 请求

1、接口提供方如下,put 操作请求方与 post 请求完全类似。

    /*** 修改提交时调用此接口, put 请求:  http://localhost:8080/example/httpPut?info=put请求** @param dataMap* @return*/@PutMapping("example/httpPut")public Map<String, Object> httpPut(@RequestBody Map<String, Object> dataMap, String info) {System.out.println("dataMap=" + dataMap);System.out.println("info=" + info);Map<String, Object> dataMpa = new HashMap<>();dataMpa.put("code", 200);dataMpa.put("msg", "success");dataMpa.put("data", dataMap);return dataMpa;}

2、在线演示源码:

https://github.com/src/main/java/com/wmx/apachestudy/controller/ResourceController.java

https://github.com//src/main/java/com/wmx/apachestudy/httpclient/HttpPutTest.java

Http Delete 请求

1、接口提供方如下,delete 操作请求方与 get 请求完全类似。

    @DeleteMapping("example/httpDelete")public Map<String, Object> httpDelete(String info) {System.out.println("info =" + info);Map<String, Object> dataMpa = new HashMap<>();dataMpa.put("code", 200);dataMpa.put("msg", "success");dataMpa.put("data", null);return dataMpa;}

2、在线演示源码:

https://github.com/src/main/java/com/wmx/apachestudy/controller/ResourceController.java

https://github.com//apache-study/java/com/wmx/apachestudy/httpclient/HttpDeleteTest.java

异步执行请求

1、对一些不需要等待执行结果的请求,可以进行异步调用。

/*** CloseableHttpAsyncClient 异步执行 http 请求*/@Testpublic void testDelete2() {String url = "http://localhost:8080/example/httpDelete?info=delete请求";//1、创建 CloseableHttpAsyncClient 异步请求对象CloseableHttpAsyncClient httpAsyncClient = HttpAsyncClientBuilder.create().build();// 2、HttpDelete(final String uri):创建 http delete 请求对象, 设置请求头信息HttpDelete httpDelete = new HttpDelete(url);// 3、Future<HttpResponse> execute(final HttpUriRequest request,FutureCallback<HttpResponse> callback):执行请求// 异步请求在执行之前需调用 start 方法// FutureCallback 是异步执行的回调接口httpAsyncClient.start();httpAsyncClient.execute(httpDelete, new FutureCallback<HttpResponse>() {@Overridepublic void completed(HttpResponse result) {try {System.out.println("成功:" + result);String feedback = EntityUtils.toString(result.getEntity(), "UTF-8");System.out.println("feedback:" + feedback);} catch (IOException e) {e.printStackTrace();}}@Overridepublic void failed(Exception ex) {//比如对方服务没启动,连接失败,就会进这里System.out.println("失败:" + ex);}@Overridepublic void cancelled() {System.out.println("取消");}});try {TimeUnit.SECONDS.sleep(5);//主线程阻塞5秒,让异步执行完成.} catch (InterruptedException e) {e.printStackTrace();}}

Apache HttpClient 客户端使用详解相关推荐

  1. Apache HttpClient 客户端使用详解、文件上传、文件下载

    目录 HttpClient 概述与下载 Http Get 请求(文件下载) Http POST 请求(文件上传) Http Put 请求 Http Delete 请求 异步执行请求 HttpClien ...

  2. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

  3. Apache配置文件httpd.conf详解

    转自:http://www.jianshu.com/p/c36dd3946e74 Apache配置文件httpd.conf详解 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是 ...

  4. 【linux】apache的访问日志详解及演练

    文章目录 前言 一. apache日志分类 二. apache的日志格式详解 1. 输出最近的一段访问日志 2. 日志的字段所代表的内容如下: 3. apache访问日志配置文件参数详解 三. 配置修 ...

  5. Apache 虚拟主机设置详解

    Apache 虚拟主机设置详解 我们通常所说的虚拟主机技术就是将一台(或者一组)服务器的资源(系统资源.网络带宽.存储空间等)按照一定的比例分割成若干台相对独立的"小主机"的技术. ...

  6. Apache 的 httpd.conf 详解 【转】

    文章来源:Apache 的 httpd.conf 详解(很实用) ServerRoot "/usr/local" ServerRoot用于指定守护进程httpd的运行目录,http ...

  7. Apache 的 httpd.conf 详解

    ServerRoot "/usr/local" ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件 ...

  8. HttpClient 源码详解之HttpEntity

    HttpClient 源码详解 之HttpEntity 1. 类释义 An entity that can be sent or received with an HTTP message. Enti ...

  9. Apache+PHP配置过程详解

    Apache+PHP配置过程详解 经过两晚上的奋斗终于将Apache配置PHP成功,安装配置过程中走了不少弯路,特记录之. 1.Apache配置PHP个人认为首先要注意的是Apache和PHP的版本信 ...

  10. SVN的Windows和Linux客户端操作详解

    SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...

最新文章

  1. openssl在64位的机器上编译32位的库
  2. tcp/ip 协议栈Linux内核源码分析九 IPv6分片ip6_fragment 分析
  3. java: Comparable比较器,数组对象比较器
  4. 《python接口自动化测试》笔记
  5. 好用的HTML文本编辑器BBEdit for Mac
  6. 电商购物核心架构演进:谁说架构思路会过时?
  7. 1007 Maximum Subsequence Sum(25 分)
  8. vue全家桶+element-UI
  9. fla 优化思路 flash cs6
  10. 遍历文件夹下所有文件
  11. 函数对称性常见公式_函数的对称性
  12. 以太网链路捆绑原理实验
  13. php+chmod+r,从今往后,谁再告诉你Linux上chmod -R 777解决权限,果断绝交
  14. MIT JOS LAB12学习笔记
  15. 啥都不说了,今天就是要送书!
  16. 华为GAUSSDB集成
  17. 我与OutLook有个约会
  18. python爬取网站的某一句话_Python实现JS解密并爬取某音漫客网站
  19. C# 通过反射根据描述特性转换枚举型值
  20. 分布式读写锁-redisson的读锁和写锁

热门文章

  1. S3VM和TSVM的不同
  2. 拓端tecdat|用R语言制作交互式图表和地图
  3. (4)Matplotlib_零碎知识点
  4. spring教程笔记2
  5. pyspark ml
  6. Python-Spyder中文包正式发布!
  7. 深度学习在图像检索的应用
  8. python内置max()、min()函数与Numpy自带的max()、min()函数性能对比分析
  9. 数据结构以及算法的资源整理备忘
  10. php 什么函数获取ip,php函数获取在线ip与客户端ip