原创出处:http://xcxn.iteye.com/blog/1827154
第五章
5. HTTP客户端服务
5.1. HttpClient的门面
HttpClient接口代表了最重要的HTTP请求执行的合同。它施加任何限制或特定的细节上请求执行过程中,连接管理,状态管理,认证和离开的具体处理重定向到具体实现。这应该更容易来装饰接口提供额外的功能,如响应内容缓存。
DefaultHttpClient HttpClient接口的默认实现。这个类充当门面了一些特殊的的目的处理程序或策略接口实现,负责处理HTTP协议的某一方面,如重定向或的认证处理或决策关于持久性连接,并保持活动的持续时间。这使用户能够选择性地替换这些方面的习俗,特定于应用程序的默认实现。
用法如下:
DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy() { @Override public long getKeepAliveDuration( HttpResponse response, HttpContext context) { long keepAlive = super.getKeepAliveDuration(response, context); if (keepAlive == -1) { // Keep connections alive 5 seconds if a keep-alive value // has not be explicitly set by the server keepAlive = 5000; } return keepAlive; } });
DefaultHttpClient还保持一份协议拦截器,用于处理传出的请求,并传入响应,并提供用于管理那些拦截器的方法。新的协议拦截器可以被引入到协议处理器链,如果需要的话或删除。内部协议拦截器都存储在一个简单的java.util.ArrayList。它们的执行相同的自然秩序,因为它们添加到列表中。
用法如下:
DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.removeRequestInterceptorByClass(RequestUserAgent.class); httpclient.addRequestInterceptor(new HttpRequestInterceptor() { public void process( HttpRequest request, HttpContext context) throws HttpException, IOException { request.setHeader(HTTP.USER_AGENT, "My-own-client"); } });
DefaultHttpClient是线程安全的。建议这一类的同一个实例被重用多个请求的执行。当DefaultHttpClient实例不再需要,是走出去的范围,连接管理器,必须关闭与它相关的通过调用ClientConnectionManager编号shutdown()方法。
HttpClient httpclient = new DefaultHttpClient(); // Do something useful httpclient.getConnectionManager().shutdown();
5.2. HttpClient的参数
这些参数可用于自定义的行为的默认HttpClient的实现:
ClientPNames.HANDLE_REDIRECTS
='http.protocol.handle-redirects': 定义是否应自动处理重定向。这个参数期望得到一个java.lang.Boolean类型的值。如果该参数没有设置,HttpClient会自动处理重定向。
ClientPNames.REJECT_RELATIVE_REDIRECT
='http.protocol.reject-relative-redirect': 定义相对重定向是否应该被拒绝。 HTTP规范要求的位置值是一个绝对URI。这个参数期望得到一个java.lang.Boolean类型的值。如果该参数没有设置相对重定向将被允许。
ClientPNames.MAX_REDIRECTS
='http.protocol.max-redirects': 重定向到定义的最大数量。重定向数的限制是为了防止无限循环所造成的破碎的服务器端脚本。这个参数期望得到一个java.lang.Integer类型的值。如果该参数没有设置,不超过100重定向将被允许。
ClientPNames.ALLOW_CIRCULAR_REDIRECTS
='http.protocol.allow-circular-redirects': 定义循环重定向(重定向到同一个位置)是否应该被允许。 HTTP规范不够明确是否允许循环重定向,因此他们可以选择启用。这个参数期望得到一个java.lang.Boolean类型的值。如果该参数没有设置环形重定向将被禁止。
ClientPNames.CONNECTION_MANAGER_FACTORY_CLASS_NAME
='http.connection-manager.factory-class-name': 定义的默认ClientConnectionManager实现的类名。这个参数期望得到一个java.lang.String类型的值。如果该参数没有设置SingleClientConnManager将每默认情况下使用。
ClientPNames.VIRTUAL_HOST
='http.virtual-host': 定义的虚拟主机设置中使用的,而不是物理主机的主机头。这个参数期望得到一个HttpHost类型的值。将源自目标,因为它并不一定要指定一个HttpHost端口。如果该参数没有设置,目标主机的名称或IP地址(和端口,如果需要的话)将被使用。
ClientPNames.DEFAULT_HEADERS
='http.default-headers': 定义每默认情况下,每个请求要发送的请求报头。这个参数期望得到一个java.util.Collection类型Header对象。
ClientPNames.DEFAULT_HOST
='http.default-host': 定义了默认的主机。如果目标主机不明确,请求的URI(相对URI),将使用默认值。这个参数期望得到一个HttpHost类型的值。
5.3.自动处理重定向
HttpClient处理所有类型的重定向自动完成,无需用户干预的HTTP规范,明令禁止的除外。见其他(状态代码303)重定向POST和PUT请求转换为GET请求的HTTP规范所要求的。
5.4. HTTP客户端和执行上下文
DefaultHttpClient处理HTTP请求,请求执行的过程中,从来不应该改变不可变的对象。相反,它创建一个私人的可变副本的原始请求对象,其性质取决于执行上下文可以更新。因此,最终的目标主机和请求的URI的请求属性,如可确定已执行的请求后,通过检查本地HTTP上下文的内容。
最终的HttpRequest对象的执行上下文中总是代表着国家的消息_exactly_,它被发送到目标服务器。每默认情况下HTTP/1.0和HTTP/1.1使用相对的URI请求。但是,如果请求是在非隧道模式,然后通过代理发送的URI将是绝对的。
用法如下:
DefaultHttpClient httpclient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpGet httpget = new HttpGet("http://localhost:8080/"); HttpResponse response = httpclient.execute(httpget, localContext); HttpHost target = (HttpHost) localContext.getAttribute( ExecutionContext.HTTP_TARGET_HOST); HttpUriRequest req = (HttpUriRequest) localContext.getAttribute( ExecutionContext.HTTP_REQUEST); System.out.println("Target host: " + target); System.out.println("Final request URI: " + req.getURI()); // relative URI (no proxy used) System.out.println("Final request method: " + req.getMethod());
5.5.压缩响应内容
ContentEncodingHttpClient是一个简单的DefaultHttpClient的子类,增加了支持表示服务器,它支持gzip和deflate压缩的回应。这是通过现有的HTTP协议拦截器的API。根据响应的类型(文本将压缩以及与图像,这是典型的已经压缩的),这可以加快响应由于涉及的网络通信量的小,随着节省带宽的,它可以在移动的环境中是很重要。的拦截公布的API的一部分,可用于其他DefaultHttpClient实现RequestAcceptEncoding和ResponseContentEncoding。提供透明的处理gzip和deflate编码的,所以它不会是显而易见的,该处理的客户端发生。
ContentEncodingHttpClient httpclient = new ContentEncodingHttpClient(); HttpGet httpget = new HttpGet("http://www.yahoo.com/"); HttpResponse response = httpclient.execute(httpget); Header h = rsp.getFirstHeader("Content-Encoding"); if (h != null) { System.out.println("----------------------------------------"); System.out.println("Response is " + h.getValue() + " encoded"); System.out.println("----------------------------------------"); }
你也可以添加RequestAcceptEncoding 和ResponseContentEncoding拦截器到 DefaultHttpClient实例,如果需要的话。
DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.addRequestInterceptor(new RequestAcceptEncoding()); httpclient.addResponseInterceptor(new ResponseContentEncoding());
相关推荐
5. 兼容性与稳定性:HttpClient 4.2在兼容性方面做了很多工作,能较好地与其他Java库协同工作,且具有较高的稳定性。 四、实战应用示例 在实际应用中,比如爬虫或者Web服务调用,HttpClient 4.2常被用来执行...
最新HttpClient help文档,根据官方网站提供的doc制作。支持Index,Search等功能。
本文将深入探讨HttpClient 4.2中的缓存机制及其相关组件。 1. HttpClient 4.2的核心组件 - HttpClient 4.2.jar:这是HttpClient的主要库,包含了执行HTTP请求的基本功能。 - httpcore-4.2.jar:这是HTTP核心库,...
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
《HttpClient 4.2详解——构建高效可靠的网络通信》 HttpClient是Apache软件基金会下的一个开源项目,主要用于HTTP协议的客户端编程。HttpClient 4.2版本是其发展过程中的一个重要里程碑,它提供了许多改进和增强的...
在讨论HttpClient的文档时,首先应该明确它的使用范围,也即HttpClient能够做什么,以及它不做什么。在文档中,这一点被明确地指出,以帮助用户正确地利用HttpClient。 文档中提到了HttpClient的基础知识,包括以下...
《HttpClient 4.5.3官方API中文文档详解》 HttpClient是Apache软件基金会下的一个开源项目,主要用于构建HTTP客户端应用程序,提供了丰富的功能和强大的性能。本文将基于4.5.3版本的HttpClient官方API中文文档,...
HttpClient4.5已经发布有一段时间了,但网上一直没有完整的中文教程 .曾经看到过一个HttpClient4.1中文教程,但有两个问题:1.并不适用当前版本; 2.错误较多,语言不通顺。所以笔者在这里发布翻译过的HttpClient4.5...
基于apache httpclient 4.2.X开发 自动处理redirect url jsoup解析response text log4j 自动生成日志 源代码基于UTF-8编码,如果出现乱码请切换到此编码 压缩包 包含所有jar文件。
httpclient-4.2-beta1.jar
包含翻译后的API文档:httpclient-4.5.6-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.httpcomponents:httpclient:4.5.6; 标签:apache、httpcomponents、httpclient、jar包、java、中文文档; 使用...
6. **HTTP/1.1协议支持**:HttpClient 4.2完全支持HTTP/1.1协议,包括持久连接、管道化请求、分块传输编码等特性。 7. **SSL/TLS安全通信**:HttpClient提供了强大的SSL/TLS支持,可以配置信任的证书和加密算法,...
6. **Cookie管理**:HttpClient 4.2.1的`CookieStore`接口和`CookiePolicy`枚举提供了灵活的Cookie处理策略,可以处理服务器返回的Cookie,并在后续请求中自动添加合适的Cookie头。 7. **重试和重定向策略**:...
hiveserver2的jdbc调用时需要用到的两个包httpclient+httpcore. org.apache.http.*
包含翻译后的API文档:httpclient-4.2.5-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.httpcomponents:httpclient:4.2.5; 标签:apache、httpcomponents、httpclient、中文文档、jar包、java; 使用...
HttpClient 4.3.6 api文档,支持目录,索引,搜索。
包含翻译后的API文档:httpclient-4.5.5-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.apache.httpcomponents,artifactId:httpclient,version:4.5.5 使用方法:解压翻译后的API文档,用...
这个标题"HttpClient中文文档,快速开发"表明我们有了一份关于HttpClient的中文版使用指南,对于快速理解和应用HttpClient进行开发来说非常有价值。 HttpClient允许开发者执行各种HTTP方法,如GET、POST、PUT、...
### httpclient 4.5 API文档知识点概览 #### 一、基础知识 ##### 1.1 请求执行 **1.1.1 HTTP请求** - **定义**:HTTP客户端通过发送HTTP请求来与服务器进行交互。 - **组成**: - 方法(GET、POST等); - URI...
包含翻译后的API文档:httpclient-4.5.12-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.httpcomponents:httpclient:4.5.12; 标签:apache、httpcomponents、httpclient、中文文档、jar包、java; ...