HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

简介

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.5 .6(2015-09-11)

功能介绍
(1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
(2)支持自动转向
(3)支持 HTTPS 协议
(4)支持代理服务器等

HttpClient流程

(1)创建HttpClient对象。
(2)创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
(3)如果需要发送请求参数,可调用HttpGetsetParams方法来添加请求参数;对于HttpPost对象而言,可调用setEntity(HttpEntity entity)方法来设置请求参数。
(4)调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse对象。
(5)调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
(6)释放连接。无论执行方法是否成功,都必须释放连接

使用案例:
1、POM中引入commons-httpclient组件

<!-- commons-httpclient -->
<dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version><scope>compile</scope>
</dependency>

2、创建HttpClient工具类

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;/*** @Title:* @Description: Http工具类* @author: Real* @Version: 1.0*/
public class HttpTool {private static Logger logger = LoggerFactory.getLogger(HttpTool.class);private HttpTool() {}/*** POST请求** @param url       url* @param paramJson 参数的json格式*/public static String sendPost(String url, String paramJson) {logger.info("开始发起POST请求,请求地址为{},参数为{}", url, paramJson);// 创建httpClient实例对象HttpClient httpClient = new HttpClient();// 设置httpClient连接主机服务器超时时间:15000毫秒httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);// 创建post请求方法实例对象PostMethod postMethod = new PostMethod(url);// 设置post请求超时时间postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);postMethod.addRequestHeader("Content-Type", "application/json");try {//json格式的参数解析RequestEntity entity = new StringRequestEntity(paramJson, "application/json", "UTF-8");postMethod.setRequestEntity(entity);httpClient.executeMethod(postMethod);String result = postMethod.getResponseBodyAsString();postMethod.releaseConnection();return result;} catch (IOException e) {logger.error("POST请求发出失败,请求的地址为{},参数为{},错误信息为{}", url, paramJson, e.getMessage(), e);}return null;}/*** GET请求** @param urlParam url请求,包含参数*/public static String sendGet(String urlParam) {logger.info("开始发起GET请求,请求地址为{}", urlParam);// 创建httpClient实例对象HttpClient httpClient = new HttpClient();// 设置httpClient连接主机服务器超时时间:15000毫秒httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);// 创建GET请求方法实例对象GetMethod getMethod = new GetMethod(urlParam);// 设置post请求超时时间getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);getMethod.addRequestHeader("Content-Type", "application/json");try {httpClient.executeMethod(getMethod);String result = getMethod.getResponseBodyAsString();getMethod.releaseConnection();logger.info("返回信息为{}", result);return result;} catch (IOException e) {logger.error("GET请求发出失败,请求的地址为{},错误信息为{}", urlParam, e.getMessage(), e);}return null;}
}

3、测试get请求、post请求

public class HttpTest {@Testpublic void postTest(){String name= "jack";String age = "26";JSONObject jsonObject = new JSONObject();jsonObject.put("name", name);jsonObject.put("age ", age );String usage_url = "http://127.0.0.1:8080/getUserDetails";String result = HttpTool.sendPost(usage_url,jsonObject.toString());System.out.println("POST提交结果:" + result);}@Testpublic void getTest(){String usage_url = "http://127.0.0.1:8080/getUserDetails?name=jack&age=26";String result = HttpTool.sendGet(usage_url);System.out.println("GET提交结果:" + result);}
}

以上~

【Java】如何优雅的使用HttpClient相关推荐

  1. 怎样用Java 8优雅的开发业务

    怎样用Java 8优雅的开发业务 文章目录 怎样用Java 8优雅的开发业务 函数式编程 流式编程 基本原理 案例 优雅的空处理 新的并发工具类`CompletableFuture` 单机批处理多线程 ...

  2. JAVA发送手机短信,httpclient短信发送接口示例(java)

    httpclient短信发送接口示例(java),可用于直接用电脑发送短信,可根据实际情况,与联通移动公司洽谈接口,完成网上发送短信功能,如需jar包,可向联通移动公司项目部沟通. package c ...

  3. 你的Kubernetes Java应用优雅停机了吗?

    假如我们从 kafka 拉取数据然后生成任务处理数据,在服务退出时,如何保证内存中的数据能被正常处理完不丢失呢?假如服务是部署在 Kubernetes 中又该如何处理? Java 应用优雅停机 我们首 ...

  4. Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...

  5. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  6. Java如何优雅的实现时间控制

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | http://rrd.me/gCQHp 前言:需求是这样 ...

  7. ShutdownHook - java中优雅地停止服务

    1.什么是ShutdownHook 在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源.平滑退出的功能. 使用Runtime.addShutdownHook(Thread hook)方法, ...

  8. Java 如何优雅的实现时间控制

    前言:需求是这样的,在与第三方对接过程中,对方提供了token进行时效性验证,过一段时间token就会失效.后台有定时任务在获取,但是偶尔会出现token失效,这是因为在获取的时候,定时任务正在跑,可 ...

  9. java post流_Java后端HttpClient Post提交文件流 及服务端接收文件流

    客户端将文件转换为流发送: 依赖的包: org.apache.httpcomponents httpclient 4.4 org.apache.httpcomponents httpmime 4.4 ...

最新文章

  1. 自动化运维—saltstack
  2. [置顶]一步步构建大型网站架构
  3. 我校四名学生在全国中学生物理竞赛中勇夺一金三银并全部直保清华
  4. SAP cloud platform 504 gateway time out Cloud connector
  5. 解析浏览器访问服务器 Servlet 应用程序的交互过程(Servlet 容器如何处理请求资源路径)
  6. java获取参数编码_java获取接口数据编码问题
  7. java f.lenth返回值_long length
  8. 知道创宇杨冀龙:2B产品经理的自我修养
  9. Android如何判断输入框是否为空
  10. WinForm编程开发实用技巧14则(转)
  11. linux命令iconv_Linux中iconv命令的简介和使用方法
  12. 【时间序列分析】14.平稳序列的参数估计与白噪声检验
  13. NetBeans简介和简单使用
  14. 使用APICloud AVM多端组件快速实现app中的搜索功能
  15. Matlab:16进制excel转2进制mat
  16. oracle 11g crsd ocssd,[Oracle 11g r2(11.2.0.4.0)]集群守护进程gipc介绍
  17. Java50道经典编程题:(十三)数字谜题 ——循环语句及判断符的使用
  18. 网店刷单后自己线下发货还是找礼品代发?空包还是信封件怎么选才正确?
  19. Springboot毕设项目高校人事管理系统il4i5(java+VUE+Mybatis+Maven+Mysql)
  20. [Rust GUI]0.8.0版本iced代码示例 - checkbox

热门文章

  1. 希望计算机专业同学都知道这些宝藏博主
  2. linux启动db2的命令窗口_linux下如何启动db2数据库命令窗口
  3. 笔记本开机黑屏只有鼠标显示
  4. 计算机颜色管理器,Windows7色彩管理显示器ICC设置方法
  5. Android中的缓存策略,实战打造ImageLoader
  6. Unity常用插件免费下载 2018.9.4持续更新
  7. 科学计算法(e/E表示规则)
  8. jQuery-获取/设置 属性(标准属性,自定义属性)和内容
  9. 垃圾回收只知道标记清除?一文帮你打通V8垃圾回收
  10. 学校更换门窗计算机桌椅,学校机房建设中需要注意的细节