HttpClicent是Apache下的一个子项目,文档齐全,详见官网:http://hc.apache.org/httpcomponents-client-4.5.x/quickstart.html

  这里列出一些常见用法:

    (1)使用步骤:

      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. 释放连接。无论执行方法是否成功,都必须释放连接

    (2)官网示例:CloseableHttpClient httpclient = HttpClients.createDefault();HttpGet httpGet = new HttpGet("http://targethost/homepage");

CloseableHttpResponse response1 = httpclient.execute(httpGet);
// The underlying HTTP connection is still held by the response object
// to allow the response content to be streamed directly from the network socket.
// In order to ensure correct deallocation of system resources
// the user MUST call CloseableHttpResponse#close() from a finally clause.
// Please note that if response content is not fully consumed the underlying
// connection cannot be safely re-used and will be shut down and discarded
// by the connection manager.
try {
System.out.println(response1.getStatusLine());
HttpEntity entity1 = response1.getEntity();
// do something useful with the response body
// and ensure it is fully consumed
EntityUtils.consume(entity1);
} finally {
response1.close();
} HttpPost httpPost = new HttpPost("http://targethost/login");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("username", "vip"));
nvps.add(new BasicNameValuePair("password", "secret"));
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
CloseableHttpResponse response2 = httpclient.execute(httpPost); try {
System.out.println(response2.getStatusLine());
HttpEntity entity2 = response2.getEntity();
// do something useful with the response body
// and ensure it is fully consumed
EntityUtils.consume(entity2);
} finally {
response2.close();
}
  (3)解析结果:
    1.返回时JSON:
          List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("loginname","ss"));
nvps.add(new BasicNameValuePair("password", "s123"));
hp.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse res = client.execute(hp);
html = EntityUtils.toString(res.getEntity());

        JSONObject obj = JSON.parseObject(html);//这里用了fastjson,把String类型的html转换成JSON对象,若有多个,可转换成数组
        Iterator it = obj.keySet().iterator();
        while(it.hasNext()){
          String key = it.next().toString();
          if(key.equals("Success")){
          html = obj.get(key).toString();
          }
        }

    2.返回html:  

        HttpGet hg = new HttpGet(course_list_url);
HttpResponse res = client.execute(hg);
html = EntityUtils.toString(res.getEntity());
Document doc = Jsoup.parse(html);//这里用了Jsoup抓取需要的html代码
Element content = doc.getElementById("col-sm-5");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}
String courseId = "";
Elements courseIds = doc.select("div.overflow-h>a[href]");
Elements courseTimes = doc.select("h3.heading-xs>a");

    (4)其他关于HttoClicent相关例子:

  1 package com.test;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.IOException;
6 import java.io.UnsupportedEncodingException;
7 import java.security.KeyManagementException;
8 import java.security.KeyStore;
9 import java.security.KeyStoreException;
10 import java.security.NoSuchAlgorithmException;
11 import java.security.cert.CertificateException;
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import javax.net.ssl.SSLContext;
16
17 import org.apache.http.HttpEntity;
18 import org.apache.http.NameValuePair;
19 import org.apache.http.ParseException;
20 import org.apache.http.client.ClientProtocolException;
21 import org.apache.http.client.entity.UrlEncodedFormEntity;
22 import org.apache.http.client.methods.CloseableHttpResponse;
23 import org.apache.http.client.methods.HttpGet;
24 import org.apache.http.client.methods.HttpPost;
25 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
26 import org.apache.http.conn.ssl.SSLContexts;
27 import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
28 import org.apache.http.entity.ContentType;
29 import org.apache.http.entity.mime.MultipartEntityBuilder;
30 import org.apache.http.entity.mime.content.FileBody;
31 import org.apache.http.entity.mime.content.StringBody;
32 import org.apache.http.impl.client.CloseableHttpClient;
33 import org.apache.http.impl.client.HttpClients;
34 import org.apache.http.message.BasicNameValuePair;
35 import org.apache.http.util.EntityUtils;
36 import org.junit.Test;
37
38 public class HttpClientTest {
39
40 @Test
41 public void jUnitTest() {
42 get();
43 }
44
45 /**
46 * HttpClient连接SSL
47 */
48 public void ssl() {
49 CloseableHttpClient httpclient = null;
50 try {
51 KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
52 FileInputStream instream = new FileInputStream(new File("d:\\tomcat.keystore"));
53 try {
54 // 加载keyStore d:\\tomcat.keystore
55 trustStore.load(instream, "123456".toCharArray());
56 } catch (CertificateException e) {
57 e.printStackTrace();
58 } finally {
59 try {
60 instream.close();
61 } catch (Exception ignore) {
62 }
63 }
64 // 相信自己的CA和所有自签名的证书
65 SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()).build();
66 // 只允许使用TLSv1协议
67 SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null,
68 SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
69 httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
70 // 创建http请求(get方式)
71 HttpGet httpget = new HttpGet("https://localhost:8443/myDemo/Ajax/serivceJ.action");
72 System.out.println("executing request" + httpget.getRequestLine());
73 CloseableHttpResponse response = httpclient.execute(httpget);
74 try {
75 HttpEntity entity = response.getEntity();
76 System.out.println("----------------------------------------");
77 System.out.println(response.getStatusLine());
78 if (entity != null) {
79 System.out.println("Response content length: " + entity.getContentLength());
80 System.out.println(EntityUtils.toString(entity));
81 EntityUtils.consume(entity);
82 }
83 } finally {
84 response.close();
85 }
86 } catch (ParseException e) {
87 e.printStackTrace();
88 } catch (IOException e) {
89 e.printStackTrace();
90 } catch (KeyManagementException e) {
91 e.printStackTrace();
92 } catch (NoSuchAlgorithmException e) {
93 e.printStackTrace();
94 } catch (KeyStoreException e) {
95 e.printStackTrace();
96 } finally {
97 if (httpclient != null) {
98 try {
99 httpclient.close();
100 } catch (IOException e) {
101 e.printStackTrace();
102 }
103 }
104 }
105 }
106
107 /**
108 * post方式提交表单(模拟用户登录请求)
109 */
110 public void postForm() {
111 // 创建默认的httpClient实例.
112 CloseableHttpClient httpclient = HttpClients.createDefault();
113 // 创建httppost
114 HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action");
115 // 创建参数队列
116 List<namevaluepair> formparams = new ArrayList<namevaluepair>();
117 formparams.add(new BasicNameValuePair("username", "admin"));
118 formparams.add(new BasicNameValuePair("password", "123456"));
119 UrlEncodedFormEntity uefEntity;
120 try {
121 uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
122 httppost.setEntity(uefEntity);
123 System.out.println("executing request " + httppost.getURI());
124 CloseableHttpResponse response = httpclient.execute(httppost);
125 try {
126 HttpEntity entity = response.getEntity();
127 if (entity != null) {
128 System.out.println("--------------------------------------");
129 System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"));
130 System.out.println("--------------------------------------");
131 }
132 } finally {
133 response.close();
134 }
135 } catch (ClientProtocolException e) {
136 e.printStackTrace();
137 } catch (UnsupportedEncodingException e1) {
138 e1.printStackTrace();
139 } catch (IOException e) {
140 e.printStackTrace();
141 } finally {
142 // 关闭连接,释放资源
143 try {
144 httpclient.close();
145 } catch (IOException e) {
146 e.printStackTrace();
147 }
148 }
149 }
150
151 /**
152 * 发送 post请求访问本地应用并根据传递参数不同返回不同结果
153 */
154 public void post() {
155 // 创建默认的httpClient实例.
156 CloseableHttpClient httpclient = HttpClients.createDefault();
157 // 创建httppost
158 HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action");
159 // 创建参数队列
160 List<namevaluepair> formparams = new ArrayList<namevaluepair>();
161 formparams.add(new BasicNameValuePair("type", "house"));
162 UrlEncodedFormEntity uefEntity;
163 try {
164 uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
165 httppost.setEntity(uefEntity);
166 System.out.println("executing request " + httppost.getURI());
167 CloseableHttpResponse response = httpclient.execute(httppost);
168 try {
169 HttpEntity entity = response.getEntity();
170 if (entity != null) {
171 System.out.println("--------------------------------------");
172 System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"));
173 System.out.println("--------------------------------------");
174 }
175 } finally {
176 response.close();
177 }
178 } catch (ClientProtocolException e) {
179 e.printStackTrace();
180 } catch (UnsupportedEncodingException e1) {
181 e1.printStackTrace();
182 } catch (IOException e) {
183 e.printStackTrace();
184 } finally {
185 // 关闭连接,释放资源
186 try {
187 httpclient.close();
188 } catch (IOException e) {
189 e.printStackTrace();
190 }
191 }
192 }
193
194 /**
195 * 发送 get请求
196 */
197 public void get() {
198 CloseableHttpClient httpclient = HttpClients.createDefault();
199 try {
200 // 创建httpget.
201 HttpGet httpget = new HttpGet("http://www.baidu.com/");
202 System.out.println("executing request " + httpget.getURI());
203 // 执行get请求.
204 CloseableHttpResponse response = httpclient.execute(httpget);
205 try {
206 // 获取响应实体
207 HttpEntity entity = response.getEntity();
208 System.out.println("--------------------------------------");
209 // 打印响应状态
210 System.out.println(response.getStatusLine());
211 if (entity != null) {
212 // 打印响应内容长度
213 System.out.println("Response content length: " + entity.getContentLength());
214 // 打印响应内容
215 System.out.println("Response content: " + EntityUtils.toString(entity));
216 }
217 System.out.println("------------------------------------");
218 } finally {
219 response.close();
220 }
221 } catch (ClientProtocolException e) {
222 e.printStackTrace();
223 } catch (ParseException e) {
224 e.printStackTrace();
225 } catch (IOException e) {
226 e.printStackTrace();
227 } finally {
228 // 关闭连接,释放资源
229 try {
230 httpclient.close();
231 } catch (IOException e) {
232 e.printStackTrace();
233 }
234 }
235 }
236
237 /**
238 * 上传文件
239 */
240 public void upload() {
241 CloseableHttpClient httpclient = HttpClients.createDefault();
242 try {
243 HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceFile.action");
244
245 FileBody bin = new FileBody(new File("F:\\image\\sendpix0.jpg"));
246 StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN);
247
248 HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("bin", bin).addPart("comment", comment).build();
249
250 httppost.setEntity(reqEntity);
251
252 System.out.println("executing request " + httppost.getRequestLine());
253 CloseableHttpResponse response = httpclient.execute(httppost);
254 try {
255 System.out.println("----------------------------------------");
256 System.out.println(response.getStatusLine());
257 HttpEntity resEntity = response.getEntity();
258 if (resEntity != null) {
259 System.out.println("Response content length: " + resEntity.getContentLength());
260 }
261 EntityUtils.consume(resEntity);
262 } finally {
263 response.close();
264 }
265 } catch (ClientProtocolException e) {
266 e.printStackTrace();
267 } catch (IOException e) {
268 e.printStackTrace();
269 } finally {
270 try {
271 httpclient.close();
272 } catch (IOException e) {
273 e.printStackTrace();
274 }
275 }
276 }
277 }</namevaluepair></namevaluepair></namevaluepair></namevaluepair>
												

java HttpClicent网络请求与解析的更多相关文章

  1. 怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

    在寻常的开发中常常会有非常多列表页面.每做一个列表页就须要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件. 假设版本号更新迭代比較频繁,如此以往,就会使项目pr ...

  2. Android网络请求与解析

    1.Volley和Gson结合使用——Volley适用于小型数据,多次的请求,使用Gson解析时,服务器数据的键值不能包含常用的标识符如:class.....等,这些就需要与服务端小伙伴商量 这样也可 ...

  3. java实现网络请求超时自动熔断

    原文:https://www.jianshu.com/p/326465500d1c?utm_campaign 使用场景 之前在实现熔断降级组件时,需要实现一个接口的超时中断,意思是,业务在使用熔断降级 ...

  4. Android检查设备是否可以访问互联网,判断Internet连接,测试网络请求,解析域名

    安卓SDK提供了ConnectivityManager类,那么我们就可以轻松的获取设备的网络状态以及联网方式等信息. 但是要想知道安卓设备连接的网络能不能访问到Internet,就要费一番周折了. 本 ...

  5. IOS SWIFT 网络请求JSON解析 基础一

    前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...

  6. 【框架】网络请求+Gson解析--Retrofit 2

    其实内部是封装了Okhttp和Gson解析 public class CourseFragmentAPI { public static void get(String userId, BaseCal ...

  7. Java之网络请求工具类(依赖:org.apache.http;注:HttpClient 4.4,HttpCore 4.4)

    到此处可以去下载依赖包:http://hc.apache.org/downloads.cgi import java.util.List; import org.apache.http.HttpSta ...

  8. Win(Phone)10开发第(3)弹,简单的Demo程序网络请求json解析列表显示

    先分享一个由Json字符串直接生成解析对应的类的工具: jsonclassgenerator14 百度天气接口 下面是由一个小功能(又特么的是天气)的实现,记录下下UAP的流程和结构(其实跟之前一模一 ...

  9. 网络请求+Gson解析--Retrofit 2

    其实内部是封装了Okhttp和Gson解析 public class CourseFragmentAPI { public static void get(String userId, BaseCal ...

随机推荐

  1. Fiddler 4 断点调试(修改request请求参数)

    1.选中要测试的链接 2然后点击规则的Automatic Breakpoints 的Before Requests 3.重新发送请求找到测试的点链接 最终效果如下

  2. ubantu+nginx+uwsgi+django部署

    1.更新ubantu的apt apt-get update 必要时候更新系统:      apt-get upgrade 2.远程连接服务器 ssh 用户名@ip 上传代码 :        scp ...

  3. moviepy音视频开发:音频合成类AudioArrayClip介绍

    ☞ ░ 前往老猿Python博文目录 ░ AudioArrayClip类是AudioClip的直接子类,用于从一个numpy音频数组构建音频剪辑.AudioArrayClip类只有一个构造方法,在构造 ...

  4. 老猿学5G:融合计费基于QoS流计费QBC的触发器Triggers

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 SMF中的功能体CTF在用户上网时达到一定条件就会向CHF上报流量,而CTF什么时候触发流量上报是由CTF中的触发器来控制的.在<老猿学5G: ...

  5. 第8.4节 Python类中不是构造方法却胜似构造方法的__new方法__深入剖析:语法释义

    一.    引言 在本博前面的内容都对构造方法__init__进行了介绍,也在前面章节引入了__new__方法,但老猿认为__new__方法比构造方法__init__更应该属于构造方法.这是因为在Py ...

  6. PyQt(Python+Qt)学习随笔:树型部件的QTreeWidgetItem项中列不同角色数据的有关访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件QTreeWidget中的QTreeWidgetItem项中可以有多列数据,每列数据可以根据 ...

  7. 第二章、PyQt5应用构建详细过程介绍

    老猿Python博文目录 老猿Python博客地址 一.引言 在上节<第一章.PyQt的简介.安装与配置>介绍了PyQt5及其安装和配置过程,本节将编写一个简单的PyQt5应用,介绍基本的 ...

  8. flask加载配置文件的三种方法

    1.第一种方法也是我们最长用到的,包括我们项目中也是采用第一种的方法,加载配置文件 配置信息全部写在config.py里面,在主app.py的文件中写入 import config app.confi ...

  9. js 导出div 中的类容为 word 文件

    //引入包 <script src="/FileSaver.js"></script>  <script src="/jquery.word ...

  10. 没有它你的DevOps是玩不转的,你信不?

    摘要:架构的选择对于DevOps的实践是至关重要的,从某种程度上来说,架构就是DevOps这场战役的粮草,它是支撑着DevOps成功落地的重要前提. 善用兵者,役不再籍,粮不三载.取用于国,因粮于敌, ...