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. 第7.9节 案例详解:Python类封装

    上节介绍了Python中类的封装机制,本节结合一个具体例子进行详细说明. 我们定义一个Person类,其内部有姓名.年龄和类型三个实例变量,并定义了相关的存取方法: class Person():   ...

  2. PyQt(Python+Qt)学习随笔:Action功能详解及Designer中的操作方法

    老猿Python博文目录 老猿Python博客地址 一.引言 Qt Designer中的部件栏并没Action相关的部件,Action可以在右侧的Action Editor中编辑,如图: 如果没有出现 ...

  3. 【JAVA】SSM开源项目源码--城市学院移动后勤-毕业设计(Spring SpringMvc Mybatis Mui Redis )

    项目简介 大学时期老师给我做的项目,学校后勤管理中心,也作为毕业设计项目. 有 后勤保修 二手交易 失物招领 后勤通知 等功能. 城市学院移动后勤 有APP端(webapp)和WEB端(PC) 后端使 ...

  4. Java程序员需要了解的底层知识(一)

    硬件基础知识 - Java相关硬件 汇编语言的执行过程(时钟发生器  寄存器  程序计数器) 计算机启动过程 进程线程纤程的基本概念面试高频 -  纤程的实现 内存管理 进程管理与线程管理(进程与线程 ...

  5. Hive数据导入HBase引起数据膨胀引发的思考

    最近朋友公司在做一些数据的迁移,主要是将一些Hive处理之后的热数据导入到HBase中,但是遇到了一个很奇怪的问题:同样的数据到了HBase中,所占空间竟增长了好几倍!详谈中,笔者建议朋友至少从几点原 ...

  6. aspnetcore webapi 解决发布以后每隔一段时间请求变缓慢

    项目:netcore webapi 3.1 平台:windows server 2008 r2 服务器:IIS 7.5 项目发布到IIS以后第一次请求特别慢大概7.8秒,然后每隔5分钟请求一次大概2. ...

  7. 【题解】AcWing 193. 算乘方的牛

    原题链接 题目描述 约翰的奶牛希望能够非常快速地计算一个数字的整数幂P(1 <= P <= 20,000)是多少,这需要你的帮助. 在它们计算得到最终结果的过程中只能保留两个工作变量用于中 ...

  8. AcWing 295. 清理班次

    这题显然跟 区间覆盖 是一样的,而且值域在 \(1000000\) 以内,不用离散化,直接贪心求解即可. 具体地:设 \(nxt[i]\) 为从值域 \(i\) 出发,能到达最远的右端点. 一段段地跳 ...

  9. rocketMq指定broker ip地址,适合解决云主机部署问题

      在工作中遇到了一个这个问题,就是我们rocketmq是部署在云主机上的 但是我们的开发同事在自己的电脑连接rocketmq链接不上 报错显示Caused by: org.apache.rocket ...

  10. C++异常之三 异常处理接口声明

    异常处理接口声明 1 一般为了方便程序员阅读代码,提高程序的可读性,会将函数中的异常类型声明至函数头后方,不用一行一行的找抛出内容: 2 这里要注意一点,这属于C++的标准语法,但在VS中这个操作不被 ...