HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。当前官网最新版介绍页是:http://hc.apache.org/httpcomponents-client-4.5.x/index.html

许多模拟http请求的框架都用httpclient,测试人员可通过它模拟请求http协议接口,做接口自动化测试。

1、包下载:
地址:http://mvnrepository.com/

        <!-- maven依赖 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>

发送get请求

1、通过请求参数url和头文件cookie作为参数(cookie可以为空)发送get请求,读取返回内容

代码如下:

public static String httpGet(String url,String cookie) throws Exception{  

        String result=""; //返回信息
//创建一个httpGet请求
HttpGet request=new HttpGet(url);
//创建一个htt客户端
@SuppressWarnings("resource")
HttpClient httpClient=new DefaultHttpClient();
//添加cookie到头文件
request.addHeader("Cookie", cookie);
//接受客户端发回的响应
HttpResponse httpResponse=httpClient.execute(request);
//获取返回状态
int statusCode=httpResponse.getStatusLine().getStatusCode();
if(statusCode==HttpStatus.SC_OK){
//得到客户段响应的实体内容
HttpEntity responseHttpEntity=httpResponse.getEntity();
//得到输入流
InputStream in=responseHttpEntity.getContent();
//得到输入流的内容
result=getData(in);
}
//Log.d(TAG, statusCode+"");
return result;
}

2、有时候,当我们想获取返回头文件信息,而不是返回内容时,只需要修改:

      //获取返回状态
int statusCode=httpResponse.getStatusLine().getStatusCode();
if(statusCode==HttpStatus.SC_OK){
//取头文件名(header值)信息
strResult=httpResponse.getHeaders(header)[0].getValue().toString();
// Header[] headers = httpResponse.getAllHeaders();//返回的HTTP头信息
// for (int i=0; i<headers.length; i++) {
// System.out.println(headers[i]);
// }
}

发送post请求

1、请求地址、请求参数(map格式)、请求cookie作为参数发送Post请求

public static String httpPost(String url,Map<String,String> map,String cookie) {
//返回body
String body = "";
//1、创建一个htt客户端
@SuppressWarnings("resource")
HttpClient httpClient=new DefaultHttpClient();
//2、创建一个HttpPost请求
HttpPost response=new HttpPost(url); //3、设置参数
//建立一个NameValuePair数组,用于存储欲传送的参数
List<NameValuePair> params = new ArrayList<NameValuePair>();
if(map!=null){
for (Entry<String, String> entry : map.entrySet()) {
//添加参数
params.add( new BasicNameValuePair(entry.getKey(),entry.getValue()) );
}
} //4、设置参数到请求对象中
try {
response.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} //5、设置header信息
response.setHeader("Content-type", "application/x-www-form-urlencoded");
response.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//添加cookie到头文件
response.addHeader("Cookie", cookie); //6、设置编码
//response.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
//7、执行post请求操作,并拿到结果(同步阻塞)
CloseableHttpResponse httpResponse;
try {
httpResponse = (CloseableHttpResponse) httpClient.execute(response);
//获取结果实体
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
//按指定编码转换结果实体为String类型
body = EntityUtils.toString(entity, "utf-8");
}
EntityUtils.consume(entity);
//释放链接
httpResponse.close();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return body;
}

2、post请求获取头文件header信息

//7执行post请求
HttpResponse response = httpClient.execute(httpPost);
//取头信息
Header[] headers = response.getAllHeaders();
for(int i=0;i<headers.length;i++) {
System.out.println(headers[i].getName() +"=="+ headers[i].getValue());
}

3、addHeader与setHeader区别

HttpClient在添加头文件的时候,需要用到addHeader或setHeader

区别:

1、同名Header可以有多个 ,Header[] getHeaders(String name)。
2、运行时使用的是第一个, Header getFirstHeader(String name)。
3、addHeader,如果同名header已存在,则追加至原同名header后面。
4、setHeader,如果同名header已存在,则覆盖一个同名header。

2、源代码

链接:http://files.cnblogs.com/files/airsen/HttpClientUtil.rar

参考

1、httpclient中文翻译:http://blog.csdn.net/column/details/httpclient.html

2、httpclient翻译:http://blog.csdn.net/linghu_java/article/details/43306613

3、轻松把玩HttpClient之模拟post请求示例:http://blog.csdn.net/xiaoxian8023/article/details/49863967

4、http://www.codeweblog.com/httpclient-%E6%93%8D%E4%BD%9C%E5%B7%A5%E5%85%B7%E7%B1%BB/

使用httpclient发送get或post请求的更多相关文章

  1. HttpClient发送get,post接口请求

    HttpClient发送get post接口请求/*  * post  * @param url POST地址 * @param data POST数据NameValuePair[] * @retur ...

  2. Android笔记---使用HttpClient发送POST和GET请求

    在Android上发送 HTTP 请求的方式一般有两种, HttpURLConnection 和 HttpClient,关于HttpURLConnection的使用方法能够參考HTTP之利用HttpU ...

  3. Java实现HttpClient发送GET、POST请求(https、http)

    1.引入相关依赖包 jar包下载:httpcore4.5.5.jar    fastjson-1.2.47.jar maven: <dependency> <groupId>o ...

  4. HttpClient发送Get和Post请求

    package JanGin.httpClient.demo; import java.io.IOException; import java.io.UnsupportedEncodingExcept ...

  5. HttpClient 发送 HTTP、HTTPS 请求的简单封装

    import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; import org.apache.http.Http ...

  6. [java,2018-01-16] HttpClient发送、接收 json 请求

    最近需要用到许多在后台发送http请求的功能,可能需要发送json和xml类型的数据. 就抽取出来写了一个帮助类: 首先判断发送的数据类型是json还是xml: import org.dom4j.Do ...

  7. 读取配置文件的URL,使用httpClient发送Post和Get请求,实现查询快递物流和智能机器人对话

    1.主要jar包: httpclient-4.3.5.jar   httpcore-4.3.2.jar 2.目录结构如图所示: 3.url.properties文件如下: geturl=http:// ...

  8. 【httpclient-4.3.1.jar】httpclient发送get、post请求以及携带数据上传文件

    1.发送get.post携带参数以及post请求接受JSON数据: package cn.qlq.utils; import java.io.BufferedReader; import java.i ...

  9. java使用HttpClient 发送get、pot请求

    package eidolon.messageback.PostUtil; import java.io.BufferedReader; import java.io.IOException; imp ...

随机推荐

  1. php缓冲区详解

    什么是缓冲区(buffer)? 简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网山找下资料. 其实缓冲区最 ...

  2. AngularJs之八

    ***今天讲一下angularJs的路由功能: 一:angularJs路由. 1.AngularJS 路由允许我们通过不同的 URL 访问不同的内容. 2.通过 AngularJS 可以实现多视图的单 ...

  3. 被逼着写的jquery工作日管理日历插件

    因为工作原因,在我刚进入新公司之后,立马要求让我做一个jquery的插件demo.我的天,我面试的可是.net工程师啊.虽然以前接触过js,jquery,但也只是接触过一丢丢啊,没办法,只好硬着头皮上 ...

  4. 梯度提升树(GBDT)原理小结

    在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting De ...

  5. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...

  6. Hibernate中的锁机制

    锁机制:是数据库为了保证数据的一致性<一个事务的各种操作不相互影响>而使各种共享资源在被并发访问访问变得有序所设计的一种规则,用来保证在当前用户进行操作数据的时候其他的用户不能对同一数据进 ...

  7. 基于.NET平台常用的框架整理(转)

    自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的 学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到, ...

  8. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

  9. jeffy-vim-v3.0

    jeffy-vim-v3.0 修改了配色.

  10. SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join

    nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...