HttpClient4.5.1使用指南:基础与连接管理

需积分: 10 5 下载量 21 浏览量 更新于2024-07-19 收藏 239KB PDF 举报
"HttpClient4.5.1教程" HttpClient是一个由Apache基金会开发的Java库,用于执行HTTP请求。HttpClient 4.5.1是该库的一个版本,提供了许多增强的功能和改进,以支持更高效、安全的HTTP通信。本教程旨在帮助开发者理解和使用HttpClient 4.5.1进行网络通信。 1. 基本概念 HttpClient的基础是发送HTTP请求并处理响应。这涉及以下关键组件: - **HTTP请求**:包括方法(GET、POST等)、URL、头信息和可能的实体(请求体)。 - **HTTP响应**:包含状态码、头信息和实体(响应体)。 - **消息头**:用于传递额外信息,如内容类型、编码和缓存控制。 - **HTTP实体**:可以是请求或响应的一部分,用于传输数据,例如JSON或XML。 2. HttpClient接口与线程安全性 - HttpClient接口设计为线程不安全的,这意味着每个请求应对应一个HttpClient实例,以避免并发问题。 - 关于资源释放,使用完毕后,必须确保低级别的资源(如连接)被正确关闭。 - HttpClient实例的生命周期应与应用程序的生命周期匹配,以有效地管理资源。 3. HTTP执行上下文 - HTTP执行上下文存储了在请求执行过程中需要的信息,如认证凭据、重定向策略等。 4. 协议拦截器 - 允许在请求和响应的生命周期中插入自定义逻辑,例如添加头信息或修改实体。 5. 异常处理 - HttpClient处理HTTP传输层的安全性,如网络中断。 - 鉴于HTTP方法的幂等性,某些方法(如GET)即使在网络不稳定时也能成功。 - 自动异常恢复机制可以处理短暂的网络问题。 - RequestRetryHandler接口允许自定义重试策略。 6. 中断请求 - 提供了方法来取消正在进行的请求,这对于用户取消操作或应用程序关闭时清理资源至关重要。 7. 重定向处理 - HttpClient能够自动处理HTTP状态码为3xx的重定向响应,但也可以通过配置禁用或自定义此行为。 8. 连接管理 - 连接持久化可减少建立新连接的开销,提高性能。 - HTTP连接路由考虑了代理服务器、SSL/TLS终止以及根据目标主机和端口选择合适的连接。 - 包括对安全HTTP连接的支持。 9. 连接管理者 - 管理连接和连接池,以有效地复用已建立的连接。 - SimpleConnectionManager适用于基本需求,而更复杂的场景可能需要自定义或高级连接管理器。 HttpClient 4.5.1的高级功能还包括支持多协议、异步执行、Cookie管理、身份验证和更多。理解和熟练使用HttpClient库可以极大地提升Java应用程序的网络功能,同时提供灵活和强大的HTTP通信解决方案。开发者应该根据项目需求选择合适的配置和策略,以实现最佳性能和可靠性。
2016-05-23 上传
http工具类:package com.tpl.util; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; /** * */ public class HttpClientUtil { public static void main(String arg[]) throws Exception { String url = "http://xxx/project/getxxx.action"; JSONObject params= new JSONObject(); List res=new ArrayList(); JSONObject params1 = new JSONObject(); // params1.put("code", "200"); // params1.put("phone", "13240186028"); res.add(params1); params.put("result", res); String ret = doPost(url, params).toString(); System.out.println(ret); } /** httpClient的get请求方式2 * @return * @throws Exception */ public static String doGet(String url, String charset) throws Exception { /* * 使用 GetMethod 来访问一个 URL 对应的网页,实现步骤: 1:生成一个 HttpClinet 对象并设置相应的参数。 * 2:生成一个 GetMethod 对象并设置响应的参数。 3:用 HttpClinet 生成的对象来执行 GetMethod 生成的Get * 方法。 4:处理响应状态码。 5:若响应正常,处理 HTTP 响应内容。 6:释放连接。 */ /* 1 生成 HttpClinet 对象并设置参数 */ HttpClient httpClient = new HttpClient(); // 设置 Http 连接超时为5秒 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000); /* 2 生成 GetMethod 对象并设置参数 */ GetMethod getMethod = new GetMethod(url); // 设置 get 请求超时为 5 秒