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. Python学习--05函数

    Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.我们已经知道Python提供了许多内建函数,比如print().但我们 ...

  2. TODO List - 任务表

    TODO List - 任务表 Angular1 --> Ionic1 --> Vue --> Weex Python --> Django --> Tornado -- ...

  3. 为 Sublime Text 3059 配置 PHP 编译环境

    关于  Sublime Text 3059 的安装及汉化 请参看 http://www.xiumu.org/note/sublime-text-3.shtml 为 sublime Text 配置 PH ...

  4. Android动画效果之Frame Animation(逐帧动画)

    前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...

  5. .NET Core的文件系统[4]:由EmbeddedFileProvider构建的内嵌(资源)文件系统

    一个物理文件可以直接作为资源内嵌到编译生成的程序集中.借助于EmbeddedFileProvider,我们可以统一的编程方式来读取内嵌于某个程序集中的资源文件,不过在这之前我们必须知道如何将一个项目文 ...

  6. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)

    RAC 特殊问题和实战经验(五) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  7. 2.C#WinForm基础Email分析器

    功能:输入Email地址,输出用户名和域名 string[] String.split(params char[] separator)(+5重载)) 返回的字符串数组包含此实例的字符串(由指定Uni ...

  8. WCF Basics - FAQs Series【WCF基础----问答系列教程】

    WCF学习系列一[WCF Interview Questions-Part 1 翻译系列] WCF学习系列二---[WCF Interview Questions – Part 2 翻译系列] WCF ...

  9. 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON

    项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发 ...

  10. Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...