java HttpClicent网络请求与解析
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网络请求与解析的更多相关文章
- 怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
在寻常的开发中常常会有非常多列表页面.每做一个列表页就须要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件. 假设版本号更新迭代比較频繁,如此以往,就会使项目pr ...
- Android网络请求与解析
1.Volley和Gson结合使用——Volley适用于小型数据,多次的请求,使用Gson解析时,服务器数据的键值不能包含常用的标识符如:class.....等,这些就需要与服务端小伙伴商量 这样也可 ...
- java实现网络请求超时自动熔断
原文:https://www.jianshu.com/p/326465500d1c?utm_campaign 使用场景 之前在实现熔断降级组件时,需要实现一个接口的超时中断,意思是,业务在使用熔断降级 ...
- Android检查设备是否可以访问互联网,判断Internet连接,测试网络请求,解析域名
安卓SDK提供了ConnectivityManager类,那么我们就可以轻松的获取设备的网络状态以及联网方式等信息. 但是要想知道安卓设备连接的网络能不能访问到Internet,就要费一番周折了. 本 ...
- IOS SWIFT 网络请求JSON解析 基础一
前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...
- 【框架】网络请求+Gson解析--Retrofit 2
其实内部是封装了Okhttp和Gson解析 public class CourseFragmentAPI { public static void get(String userId, BaseCal ...
- 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 ...
- Win(Phone)10开发第(3)弹,简单的Demo程序网络请求json解析列表显示
先分享一个由Json字符串直接生成解析对应的类的工具: jsonclassgenerator14 百度天气接口 下面是由一个小功能(又特么的是天气)的实现,记录下下UAP的流程和结构(其实跟之前一模一 ...
- 网络请求+Gson解析--Retrofit 2
其实内部是封装了Okhttp和Gson解析 public class CourseFragmentAPI { public static void get(String userId, BaseCal ...
随机推荐
- JVM(五)-垃圾收集器入门
概述: 大家都知道java相较于c.c++而言最大的优点就是JVM会帮助程序员去回收垃圾,实现对内存的自动化管理.那为什么程序员还需要去了解垃圾回收和内存分配?答案很简单,当需要排查各种内存溢内存泄漏 ...
- PyQt(Python+Qt)学习随笔:QListWidgetItem的构造方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListWidgetItem对象专门用于作为QListWidget对象的一个项. QListWid ...
- 性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)
性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试. 1 性能测试技能树 性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势.性能测试工作实质 ...
- Llbp2p是什么?
这是个很好的问题.用一句话来概况就是libp2p是一个模块化的协议系统,它的规范和程序库可以用来开发p2p网络应用程序. 对等节点基础 对于我们对libp2p在上面的概要描述有很多内容需要进一步解释, ...
- 开始是为了结束,结束是新的开始——NOI 2020 游记
Day 0 报道日 晚上的时候我们的教练给我们做考前动员.给我们讲:NOI的五个小时需要认真的规划,不能被T1打乱节奏.他让我们思考明天的策略,把可能出问题的地方都想清楚. 结果后来,宿管给我测体温, ...
- Java PDF全套笔记
java 知识pdf文档,基本涵盖了java知识点 java基础部分:https://github.com/HOSystemH/JavaFile/tree/master/JavaPDF java高级部 ...
- 二叉排序树(BST)
二叉排序树(BST) 二叉排序树,又称二叉查找树(BST) 左子树结点值<根节点值<右子树结点值 如果用中序遍历来遍历一棵二叉排序树的话,可以得到一个递增的有序数列 左根右 二叉排序树的查 ...
- SpringBoot + Mybatis-Plus 实现多数据源简单示例
1. 简介 在单体项目中,经常出现想要访问多个数据源的情况,或者因为某些性能瓶颈,将大数据量的业务表分离到另一个库等情况. 实现多数据源的方案有很多,Mybatis-Plus提供了非常简单的实 ...
- WPF TextBox 实现CornerRadius圆角
<Grid Background="Gray" Height="230" Width="229"> <Border Cor ...
- (转) SQL 中的 NULL 你真的懂了吗?【数据库|SQL】
注:转载自下面链接 https://blog.csdn.net/lnotime/article/details/104847946 SQL 中的 NULL (译自 NULL Values in SQL ...