一、HttpClient

HttpClient是Apache HttpComponents 下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包(httpclient-4.4.1.jar)。HttpClient类可以用来发送Http请求(get,post,put,delete)相比传统JDK自带的URLConnection,增加了易用性和灵活性,如下为一个post类型的HTTP请求,参数列表中的header代表HTTP请求的header,params代表参数列表,body代表HTTP请求体

需要导入:import org.apache.http.client.HttpClients等
    public String post(String url,Map<String, String> header, Map<String, Object> params, Map<String, Object> entity, int soTimeout) {
CloseableHttpClient httpclient = HttpClients.createDefault(); //创建一个httpclient
HttpPost httppost = new HttpPost(); //创建一个httppost
String result = null;
try {
//处理params,拼接url
url = joinParam(url, params); //根据需求自己实现该方法 //add request url
if (url != null) {
httppost.setURI(URI.create(url));
} //add header
for (String key : header.keySet()) {
httppost.addHeader(key, header.get(key));
} //add entity
if (entity != null) {
String entityStr = toJSONString(entity); //将map转化为string
StringEntity stringEntity = new StringEntity(entityStr, "UTF-8");
stringEntity.setContentType("text/json");
stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httppost.setEntity(stringEntity);
}
/**
* setConnectTimeout:设置连接超时时间,单位毫秒。
*setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
*setSocketTimeout:请求获取数据的超时时间,单位毫秒。
*/
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(soTimeout).setConnectionRequestTimeout(soTimeout)
.setSocketTimeout(soTimeout).build();
httppost.setConfig(requestConfig); CloseableHttpResponse response = null;
try {
//发送post请求
response = httpclient.execute(httppost);
} catch (IOException e) {
e.printStackTrace();
}
try {
// 获取响post响应实体
if (response != null) {
HttpEntity responseEntity = response.getEntity();
if(responseEntity != null) {
result = responseEntity.toString();
if(responseEntity != null) {
result = EntityUtils.toString(responseEntity);
}
}
}
} finally {
if (response != null) {
response.close();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}

二、老版本HttpClient(commons-httpclient.jar)

进入apache官网下找commons HttpClient包,可以看到一下描述:

The Commons HttpClient project is now end of life, and is no longer being developed. It has been replaced by the Apache HttpComponents project in its HttpClient and HttpCore modules, which offer better performance and more flexibility.

可以看到commons-httpclient.jar已被httpclient.jar取代,官方不再提供commons-httpclient的更新维护服务。以下是使用老版本HttpClient发送一个post请求:

需要导入:import org.apache.commons.httpclient.HttpClient等

    public String doPost(String url, Map<String, String> header, Map<String, Object> entity){
String result = "";
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod(url);
try{
//set header
postMethod.addRequestHeader("Content-Type", "application/json");
for (String key : header.keySet()) {
postMethod.addRequestHeader(key, header.get(key));
} //set entity
String paramsStr = toJSONString(entity);
RequestEntity requestEntity = new ByteArrayRequestEntity(paramsStr.getBytes("UTF-8"));
postMethod.setRequestEntity(requestEntity); //get response
int httpStatusCode = httpClient.executeMethod(postMethod);
if (httpStatusCode < 200 || httpStatusCode >= 300) {
throw new Exception("httpStatusCode is not correct! " + httpStatusCode);
}
result = IOUtils.toString(postMethod.getResponseBodyAsStream(), "UTF-8");
}catch (Exception e){
e.printStackTrace();
}finally {
postMethod.releaseConnection();
}
return result;
}

HttpClient基础用法的更多相关文章

  1. PropertyGrid控件由浅入深(二):基础用法

    目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...

  2. logstash安装与基础用法

    若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...

  3. elasticsearch安装与基础用法

    来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...

  4. BigDecimal最基础用法

    BigDecimal最基础用法 用字符串生成的BigDecimal是不会丢精度的. 简单除法. public class DemoBigDecimal { public static void mai ...

  5. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  6. Smarty基础用法

    一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...

  7. 前端自动化测试神器-Katalon的基础用法

    前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...

  8. Bootstrap fileinput:文件上传插件的基础用法

    官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...

  9. asyncio 基础用法

    asyncio 基础用法 python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? asyncio是Python 3.4版本引入 ...

随机推荐

  1. selected多次点击不生效

    表单下拉选项使用selected设置选中时,发现第一次默认选中成功,在页面不刷新的情况下操作(比如ajax),虽然selected属性设置了,但是默认选中不生效. 解决办法1 可能是浏览器缓存问题,在 ...

  2. 关于Fildder更改ip简单配置

    之前由于我们公司之前的域名备案 所以临时购买了一个域名主机,可能你如果不配置的话有时候看不到你自己app一些抓包信息具体分为以下几步 配置Filter过滤器记得勾选 第一次进入的时候 2.然后我们再H ...

  3. HAWQ + MADlib 玩转数据挖掘之(一)——安装

    一.MADlib简介 MADlib是Pivotal公司与伯克利大学合作的一个开源机器学习库,提供了精确的数据并行实现.统计和机器学习方法对结构化和非结构化数据进行分析,主要目的是扩展数据库的分析能力, ...

  4. SQL Server插入或修改数据是中文乱码的问题

    SQL Server中乱码解决方案: 在Sql Server2005英文版中,如果未对Varchar类型的字段进行设置,那么很多朋友会发现向数据库中插入记录时,如果对应的varchar类型字段 的值为 ...

  5. hexo部署Github博客

    例子:https://aquarius1993.github.io/blog/ 仓库:https://github.com/Aquarius1993/blog (前提是已经安装Xcode和git) 1 ...

  6. python3 使用matplotlib画图问题

    保存图片的问题 在画子图并保存图片的时候,用如下代码保存的图片总是不能显示,但是在运行的过程中能够正常显示图片. # coding:utf-8 from pylab import * # 创建子图 f ...

  7. 【剑指offer】06从尾到头打印链表,C++实现

    本文是原创文章,转载请注明出处! 0.前言 # 本文为牛客网<剑指offer>刷题笔记 1.题目 # 输入一个链表,从尾到头打印链表每个节点的值 2.思路 # 不改变链表结构的情况下,首先 ...

  8. nginx初步尝试

    导师要我学习下nginx,弄个简单的负载均衡出来,具体就是请求发送到nginx上,然后nginx将请求转发到后面的两个jetty应用上,这两个应用的代码是一样的,只是监听的端口不同,由于是简单尝试,因 ...

  9. 使用Percona Xtrabackup创建MySQL slave库

    一.使用Percona Xtrabackup创建MySQL slave库 MySQL Server 版本: Server version: 5.7.10-log MySQL Community Ser ...

  10. BZOJ4556 Tjoi2016&Heoi2016 字符串【后缀自动机+倍增+线段树合并】

    Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开 ...