httpClient工具介绍

HTTP协议可能是现在lntemet上使用得最多、最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源。虽然在JDK的java.net包中已经提供了访问http协议的基木功能,但是对于大部分应用程序来说,JDK库本身提供的功能还不够丰富和灵活。HttpClient是ApaChe、JakamComnmn下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP协议的客户端编程工具包,并且它支持HTTP办议最新的版术和建议。

httpClient工具的安装

所需要依赖的jar包是以下三个:

http-core-4.4.6.jar、commons-logging-1.2.jar、commons-codec-1.10.jar

方法一:到Apache官网下载工具包,然后导入到eclipse中即可,下载地址:http://hc.apache.org/downloads.cgi

方法二:前提条件是:eclipse要配置好Maven,在工程中的pom.xml文件中,写入代码,保存便自动下载jar包。搜索httpclient地址:http://www.mvnrepository.com/,操作如下所示:

①点击网址,进入首页,在搜索框中输入httpclient搜索

②点击搜索出来的第一个Apache HttpClient

③选择不同的版本,点击(本文以4.5.3版本为例)

④将上图红色框中的代码复制到eclipse建的Maven工程中的pom.xml文件下,操作如下图所示:

⑤保存pom.xml文件后,便会自动下载jar包,可在Maven工具包中查看到

httpClient工具的主要功能

1.实现了所有HTTP的方法(get、post、put、head等)

2.支持自动转向

3.支持代理服务器

4.自动处理set-cookie中的cookie

5.直接获取服务器发送的response code和headers

6.设置连接超时的能力

需要注意的是,httpclient版本的不同,功能实现的代码也就不同,需要谨慎。

httpclient使用流程

1. 创建HttpClient对象。

2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求, 创建HttpGet对象; 如果需要发送POST请求,创建HttpPost对象。

3. 如果需要发送请求参数, 可调用HttpGet、 HttpPost共同的setParams(HetpParams params)方法来添加请求参数; 对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。

4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求该方法返回一个HttpResponse。

5. 调用HttpResponse的getAllHeaders()、 getHeaders(String name)等方法可获取服务器的响应头; 调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。 程序可通过该对象获取服务器的响应内容。

6. 释放连接。 无论执行方法是否成功, 都必须释放连接。

说了这么多随处可见的东西,来两个实例,分别是get和post请求操作

get实例,url地址为百度地址,代码如下:

 1 import java.io.IOException;
2
3 import org.apache.http.HttpEntity;
4 import org.apache.http.client.ClientProtocolException;
5 import org.apache.http.client.methods.CloseableHttpResponse;
6 import org.apache.http.client.methods.HttpGet;
7 import org.apache.http.impl.client.CloseableHttpClient;
8 import org.apache.http.impl.client.HttpClients;
9 import org.apache.http.util.EntityUtils;
10
11 public class yihuqingjiu_get {
12
13 public static void main(String[] args) throws ClientProtocolException, IOException{
14 //创建httpclient对象
15 CloseableHttpClient httpClient = HttpClients.createDefault();
16 //创建请求方法的实例, 并指定请求url
17 HttpGet httpget=new HttpGet("http://www.baidu.com");
18 //获取http响应状态码
19 CloseableHttpResponse response=httpClient.execute(httpget);
20 HttpEntity entity=response.getEntity();
21 //接收响应头
22 String content=EntityUtils.toString(entity, "utf-8");
23 System.out.println(httpget.getURI());
24 System.out.println(content);
25 httpClient.close();
26 }
27
28 }

控制台显示结果如下图所示:

带参数的post实例,url地址为禅道地址,代码如下:

 1 package com.httpclient;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import org.apache.http.HttpEntity;
8 import org.apache.http.NameValuePair;
9 import org.apache.http.client.ClientProtocolException;
10 import org.apache.http.client.entity.UrlEncodedFormEntity;
11 import org.apache.http.client.methods.CloseableHttpResponse;
12 import org.apache.http.client.methods.HttpPost;
13 import org.apache.http.impl.client.CloseableHttpClient;
14 import org.apache.http.impl.client.HttpClients;
15 import org.apache.http.message.BasicNameValuePair;
16 import org.apache.http.util.EntityUtils;
17
18 public class yihuqingjiu_post_1 {
19
20 public static void main(String[] args) throws ClientProtocolException, IOException {
21
22 CloseableHttpClient httpClient = HttpClients.createDefault();
23 HttpPost httpPost = new HttpPost("http://127.0.0.1:81/zentao/user-login-L3plbnRhby8=.html");
24 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
25 nameValuePairs.add(new BasicNameValuePair("account", "admin"));
26 nameValuePairs.add(new BasicNameValuePair("password", "LHongboss941025"));
27 httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
28 CloseableHttpResponse response = httpClient.execute(httpPost);
29 HttpEntity entity = response.getEntity();
30 String content = EntityUtils.toString(entity, "utf-8");
31 System.out.println(content);
32 System.out.println(httpPost.getURI());
33 System.out.println(response);
34 httpClient.close();
35
36 }
37
38 }

控制台显示结果如下图所示:

带参数的get请求,接口使用的是豆瓣图书,代码如下:

 1 import java.io.IOException;
2 import java.util.ArrayList;
3 import java.util.List;
4
5 import org.apache.http.Consts;
6 import org.apache.http.HttpEntity;
7 import org.apache.http.NameValuePair;
8 import org.apache.http.client.ClientProtocolException;
9 import org.apache.http.client.entity.UrlEncodedFormEntity;
10 import org.apache.http.client.methods.CloseableHttpResponse;
11 import org.apache.http.client.methods.HttpGet;
12 import org.apache.http.impl.client.CloseableHttpClient;
13 import org.apache.http.impl.client.HttpClients;
14 import org.apache.http.message.BasicNameValuePair;
15 import org.apache.http.util.EntityUtils;
16
17 public class yihuqingjiu_get_1 {
18
19 public static void main(String[] args) throws ClientProtocolException, IOException {
20 //创建httpclient对象
21 CloseableHttpClient httpClient = HttpClients.createDefault();
22 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
23 nameValuePairs.add(new BasicNameValuePair("q", "瓦尔登湖"));
24 String str = EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs,
25 Consts.UTF_8));
26 HttpGet httpGet = new HttpGet("https://api.douban.com/v2/book/search"+"?"+str);
27 CloseableHttpResponse response=httpClient.execute(httpGet);
28 HttpEntity entity=response.getEntity();
29 //接收响应头
30 String content=EntityUtils.toString(entity, "utf-8");
31 System.out.println(content);
32 httpClient.close();
33
34 }
35
36 }

控制台显示结果:

这样显示看不出什么效果,需要使用json解析工具格式化就可以,解析工具地址:http://www.bejson.com/,操作如下所示:

①进入网址,点击JSON相关,选择JSON视图

②将eclipse控制台的信息复制到输入框中,并点击格式化

③点击格式化之后,再点击视图,即可出现如下界面,可清晰查看信息

httpclient介绍与请求方式详解的更多相关文章

  1. 接口测试——httpclient介绍与请求方式详解

    httpClient工具介绍 HTTP协议可能是现在lntemet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源.虽然在JDK的java.net包中已经 ...

  2. Android进阶(一)几种网络请求方式详解

    Ref:http://blog.csdn.net/zuolongsnail/article/details/6373051 Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面 ...

  3. Get,Post请求方式详解

    前几天工作中,所有表单我都采用post方法,头儿说那样不好,大型网站上一般都采用get方法,不理解. 在网上摘到一段比较有用的话 减低服务器流量压力根据 HTTP 规范,GET 用于信息获取,而且应该 ...

  4. resttemplate 请求方式详解

    get 普通请求: restemplate.getForEntity(url,String.class).getBody(); get 导出请求: restemplate.getForEntity(u ...

  5. 在ASP.NET 5应用程序中的跨域请求功能详解

    在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...

  6. JS JSOP跨域请求实例详解

    JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.这篇文章主要介绍了JS JSOP跨域请求实例详解的相关资料,需要的朋友可以参考下 ...

  7. vuex的使用及持久化state的方式详解

    vuex的使用及持久化state的方式详解 转载  更新时间:2018年01月23日 09:09:37   作者:baby格鲁特    我要评论 这篇文章主要介绍了vuex的使用及持久化state的方 ...

  8. HTTP请求方法详解

    HTTP请求方法详解 请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源]     GET方法用来请求已被URI识别的资源.指定 ...

  9. Dubbo配置方式详解

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是阿里巴巴 SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次 ...

随机推荐

  1. 图论--差分约束--POJ 2983--Is the Information Reliable?

    Description The galaxy war between the Empire Draco and the Commonwealth of Zibu broke out 3 years a ...

  2. 无向图求割点(找桥)tarjan

    本博客参考了李煜东的<算法竞赛进阶指南>,大家要是觉得这篇文章写的不错请大家支持正版.豆瓣图书 我在之前的博客中讲解了搜索序时间戳,这次我们讲讲追溯值的概念. 追溯值: 设subtree( ...

  3. 在TX2上多线程读取视频帧进行caffe推理

    参考文章:Multi-threaded Camera Caffe Inferencing TX2之多线程读取视频及深度学习推理 背景 一般在TX2上部署深度学习模型时,都是读取摄像头视频或者传入视频文 ...

  4. 线性回归 - LinearRegression - 预测糖尿病 - 量化预测的质量

    线性回归是分析一个变量与另外一个或多个变量(自变量)之间,关系强度的方法. 线性回归的标志,如名称所暗示的那样,即自变量与结果变量之间的关系是线性的,也就是说变量关系可以连城一条直线. 模型评估:量化 ...

  5. 服务器安装JDK

    1.卸载OpenJDK, 安装OracleJDK a.一般的LINUX发行版内置OpenJDK, 相当于JDK的开源版本(我们平时使用的JDK特指OracleJDK) b.OpenJDK 不能使用ja ...

  6. linux的用户管理、组管理

    用户管理:centos系统是一个多用户系统 用户分为三类: 超级用户(root) 用户id为 0 伪用户 用户id为1-499,虽然存在,但是不能用户登录 普通用户 用户id为500-60000 用户 ...

  7. Spring Cloud学习 之 Spring Cloud Ribbon 重试机制及超时设置不生效

    今天测了一下Ribbon的重试跟超时机制,发现进行的全局超时配置一直不生效,配置如下: ribbon: #单位ms,请求连接的超时时间,默认1000 ConnectTimeout: 500 #单位ms ...

  8. SpringBoot系列(十四)集成邮件发送服务及邮件发送的几种方式

    往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静 ...

  9. 【x64软路由】OpenWrt(LEDE) 20200329编译 反追踪 抗污染 加速 PSW 无缝集成 UPnP NAS

    固件说明 基于Lede OpenWrt R2020.3.19版本(源码更新截止20200329)Lienol Feed及若干自行维护的软件包 结合家庭x86软路由场景需要定制 按照家庭应用场景对固件及 ...

  10. 【Spark】SparkStreaming的容错机制

    文章目录 检查点机制 驱动器程序容错 工作节点容错 接收器容错 处理保证 检查点机制 Metadata checkpointing -- 将定义流计算的信息存入容错的系统如HDFS. Data che ...