JavahttpClient介绍以及使⽤⽰例
Java 开发语⾔中实现HTTP请求的⽅法主要有两种:⼀种是JAVA的标准类HttpUrlConnection,⽐较原⽣的实现⽅法;另⼀种是第三⽅开源框架HTTPClient。
HttpClient相⽐传统JDK⾃带的URLConnection,增加了易⽤性和灵活性,它不仅是客户端发送Http请求变得容易,⽽且也⽅便了开发⼈员测试接⼝(基于Http协议的),即提⾼了开发的效率,也⽅便提⾼代码的健壮性。
⼀、HttpClient简单介绍
HttpClient是Apache Jakarta Common下的⼦项⽬,⽤来提供⾼效的、最新的、功能丰富的⽀持HTTP协议的客户端编程⼯具包,并且它⽀持HTTP协议最新的版本和建议。HttpClient已经应⽤在很多的项⽬中,⽐如Apache Jakarta上很著名的另外两个开源项⽬Cactus和HTMLUnit都使⽤了HttpClient。
HTTPClient对HTTP的封装性⽐较不错,通过它基本上能够满⾜我们⼤部分的需求。HttpClient3.1 是
org.apachemons.httpclient下操作远程 url的⼯具包,虽然已不再更新,但实现⼯作中使⽤httpClient3.1的代码还是很多。HttpClient4.5 是org.apache.http.client下操作远程 url的⼯具包。
⼆、HttpClient特性
基于标准、纯净的java语⾔。实现了Http1.0和Http1.1。
以可扩展的⾯向对象的结构实现了Http全部的⽅法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
⽀持HTTPS协议。
通过Http代理建⽴透明的连接。
利⽤CONNECT⽅法通过Http代理建⽴隧道的https连接。
Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证⽅案。
插件式的⾃定义认证⽅案。
便携可靠的套接字⼯⼚使它更容易的使⽤第三⽅解决⽅案。
连接管理器⽀持多线程应⽤。⽀持设置最⼤连接数,同时⽀持设置每个主机的最⼤连接数,发现并关闭过期的连接。
⾃动处理Set-Cookie中的Cookie。
插件式的⾃定义Cookie策略。
Request的输出流可以避免流中内容直接缓冲到socket服务器。
Response的输⼊流可以有效的从socket服务器直接读取相应内容。
在http1.0和http1.1中利⽤KeepAlive保持持久连接。
直接获取服务器发送的response code和 headers。
设置连接超时的能⼒。
实验性的⽀持http1.1 response caching。
源代码基于Apache License 可免费获取。
三、使⽤⽅法
使⽤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. 释放连接。⽆论执⾏⽅法是否成功,都必须释放连接
四、使⽤⽰例
HttpClient 为第三⽅Http 客户端类库;在开发过程中主要是发送Http协议的Post请求和Get请求。其中Post请求使⽤HttpPost对象构建、Get请求使⽤HttpGet对象构建。
HttpGet 请求
public static void main(String[] args) throws Exception {
// 格式化请求url
// String cmd=String.format("%s:%s@%s",username,password,split[1]);
// 请求地址
String url = "blog.csdn/amosjob/article/details/82775290";
// 创建默认的客户端实例
CloseableHttpClient httpclient = ateDefault();
// 创建get请求实例
HttpGet httpGet = new HttpGet(url);
java面试题csdn
// 设置头部信息
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2"); // httpGet.addHeader("x-api-key", "XXX");
// httpGet.addHeader("x-lang", "en-US");
// 执⾏GET请求返回响应实体
HttpResponse response = ute(httpGet);
// 获取响应码
int statusCode = StatusLine().getStatusCode();
// 获取全部的请求头
Header[] allHeaders = AllHeaders();
System.out.println("响应状态码:" + statusCode);
for (int i = 0; i < allHeaders.length; i++) {
System.out.println("全部的请求头:" + allHeaders[i]);
}
// 获取响应消息实体
HttpEntity entity = Entity();
//打印输出⽹页的内容(可删除)
if (entity != null) {
// 推荐该办法打印内容
System.out.println("响应的内容:"+String(entity));
// 也可以使⽤这个⽅法
InputStream inputStream = Content();
InputStreamReader streamReader = new InputStreamReader(inputStream);
int line;
line = ad() ;
while (line!= -1) {
System.out.print((char)line);
line = ad() ;
}
}
// 关闭连接
try {
httpclient.close();
} catch (IOException e) {
/
/ TODO Auto-generated catch block
e.printStackTrace();
}
}
HttpPost 请求
public static void main(String[] args) throws Exception {
// 请求地址
String url = "passport.csdn/account/login";
// 创建默认的客户端实例
CloseableHttpClient httpclient = ateDefault();
// 创建POST对象
HttpPost httpPost = new HttpPost(url);
// 传参数
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "12345"));
try {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params);
httpPost.setEntity(entity);
} catch (Exception e) {
e.printStackTrace();
}
/
/ 执⾏GET请求返回响应实体
HttpResponse response = ute(httpPost);
// 获取响应码
int statusCode = StatusLine().getStatusCode();
// 获取全部的请求头
Header[] allHeaders = AllHeaders();
System.out.println("响应状态码:" + statusCode);
for (int i = 0; i < allHeaders.length; i++) {
System.out.println("全部的请求头:" + allHeaders[i]);
}
// 获取响应消息实体
HttpEntity entity = Entity();
// 打印输出⽹页的内容(可删除)
if (entity != null) {
System.out.println("响应的内容:"+String(entity));
}
// 关闭连接
try {
httpclient.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
以上就是Java httpClient介绍以及使⽤⽰例的详细内容,更多关于Java httpClient的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论