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. strip()的正则表达式版本

    题目:写一个函数,它接受一个字符串,做的事情和 strip()字符串方法一样.如果只 传入了要去除的字符串,没有其他参数,那么就从该字符串首尾去除空白字符. 否则,函数第二个参数指定的字符将从该字符串 ...

  2. P1522 牛的旅行 Cow Tours(floyd)

    题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...

  3. varnish 项目实战

    1.工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp ...

  4. C# 9.0 新特性预览 - 类型推导的 new

    C# 9.0 新特性预览 - 类型推导的 new 前言 随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章将向大 ...

  5. 能量项链(区间DP入门)

    题面:能量项链https://www.luogu.com.cn/problem/P1063 乍一看和石子合并差不多,可是多了头值和尾值,看起来十分麻烦 我们画一张图,紫色表示头值,蓝色表示尾值.规定西 ...

  6. Spring官网阅读(二)(依赖注入及方法注入)

    上篇文章我们学习了官网中的1.2,1.3两小节,主要是涉及了容器,以及Spring实例化对象的一些知识.这篇文章我们继续学习Spring官网,主要是针对1.4小节,主要涉及到Spring的依赖注入.虽 ...

  7. 【HBase】集群搭建/安装部署

    目录 第一步:下载对应的HBase安装包 第二步:上传压缩包并解压 第三步:修改配置文件 第四步:安装包分发到另外两台机器 第五步:三台机器创建软连接 第六步:三台机器添加环境变量 第七步:启动HBa ...

  8. Qt自定义文本输入框实现支持输入度分秒和度两种格式(简易无限制输入)

    1.自定义文本输入框 #ifndef MYLINEEDIT_H #define MYLINEEDIT_H #include <QLineEdit> #include "ui_my ...

  9. Android 源码结构分析

    源码版本:AOSP_7.1.1 硬件平台:Rockchip 由于工作要求,需要对rockchip平台的安卓系统进行剪裁.安卓源码比较庞大,会让人感到无从下手,对此,有必要了解一下源码的大致目录结构以及 ...

  10. Codeforces 1272E (Nearest Opposite Parity,反向建边)

    题意:给你n个数,每个数的值为a[i],每个点可以从i这号点跳转至(i - a[i]) 或 (i + a[i])点,点的范围为[1,n],然后问的是从偶数点跳至奇数点,从奇数点跳至偶数点的最少次数是多 ...