HttpClient世上最全教程说明
下文是世上最全的HttpClient操作教程,如下所示
HttpClient简介
HttpClient相比传统JDK自带的URLConnection 增加了易用性和灵活性 它不仅使客户端发送Http请求变得容易 而且方便开发人员测试接口(基于Http协议) 提高开发的效率 也方便提高代码的健壮性 因此熟练掌握HttpClient是很重要的必修内容 掌握HttpClient后,相信对于Http协议的了解会更加深入。 org.apache.commons.httpclient.HttpClient与org.apache.http.client.HttpClient的区别 Commons的HttpClient项目已经被停止维护 Apache HttpComponents项目HttpClient和HttpCore 模组取代,提供更好的性能和更大的灵活性。
HttpClient特性
1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1 2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE) 3. 支持HTTPS协议 4. 通过Http代理建立透明的连接 5. 利用CONNECT方法通过Http代理建立隧道的https连接 6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案 7. 插件式的自定义认证方案 8. 便携可靠的套接字工厂使它更容易的使用第三方解决方案 9. 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接 10. 自动处理Set-Cookie中的Cookie 11. 插件式的自定义Cookie策略 12. Request的输出流可以避免流中内容直接缓冲到socket服务器 13. Response的输入流可以有效的从socket服务器直接读取相应内容 14. 在http1.0和http1.1中利用KeepAlive保持持久连接 15. 直接获取服务器发送的response code和 headers 16. 设置连接超时的能力 17. 实验性的支持http1.1 response caching 18. 源代码基于Apache License 可免费获取
HttpClient使用方法
采用HttpClient发送请求、接收响应很简单 需采用以下步骤 1. 创建HttpClient对象。 2. 创建请求方法的实例,并指定请求URL。 如果需要发送GET请求,创建HttpGet对象; 如果需要发送POST请求,创建HttpPost对象。 3. 如果需要发送请求参数, 可调用HttpGet、HttpPost共同的setParams(HttpParams params)方法来添加请求参数; 对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。 4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求, 该方法返回一个HttpResponse。 5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等 方法可获取服务器的响应头; 调用HttpResponse的getEntity()方法可获取HttpEntity对象, 该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容 6. 释放连接。无论执行方法是否成功,都必须释放连接
HttpClient涉及jar包
commons-cli-1.2.jar commons-codec-1.9.jar commons-logging-1.2.jar fluent-hc-4.5.1.jar httpclient-4.5.1.jar httpclient-cache-4.5.1.jar httpclient-win-4.5.1.jar httpcore-4.4.3.jar httpcore-ab-4.4.3.jar httpcore-nio-4.4.3.jar httpmime-4.5.1.jar jna-4.1.0.jar jna-platform-4.1.0.jar
HttpClient示例分享
package com.java265; import java.io.FileInputStream; import java.io.IOException; import java.util.Arraylist; import java.util.List; import java.util.Properties; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class First { public static void main(String[] args) throws Exception{ List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("account", "")); formparams.add(new BasicNameValuePair("password", "")); HttpEntity reqEntity = new UrlEncodedFormEntity(formparams, "utf-8"); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(5000)//一、连接超时:connectionTimeout-->指的是连接一个url的连接等待时间 .setSocketTimeout(5000)// 二、读取数据超时:SocketTimeout-->指的是连接上一个url,获取response的返回等待时间 .setConnectionRequestTimeout(5000) .build(); HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://cnivi.com.cn/login"); post.setEntity(reqEntity); post.setConfig(requestConfig); HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity resEntity = response.getEntity(); String message = EntityUtils.toString(resEntity, "utf-8"); System.out.println(message); } else { System.out.println("请求失败"); } } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。