那些青春的岁月
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-alive值没有由服务器明确设置,那么保持连接持续5秒。 keepAlive = 5000; } return keepAlive; } });
DefaultHttpClient也维护一组协议拦截器,意在处理即将离开的请求和即将到达的响应,而且提供管理那些拦截器的方法。新的协议拦截器可以被引入到协议处理器链中,或在需要时从中移除。内部的协议拦截器存储在一个简单的java.util.ArrayList中。它们以被加入到list中的自然顺序来执行。
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(); // 做些有用的事 httpclient.getConnectionManager().shutdown();
HttpClient处理所有类型的自动重定向,除了那些由HTTP规范明令禁止的,比如需要用户干预的。参考其它(状态码303)POST和PUT请求重定向转换为由HTTP规范需要的GET请求。
DefaultHttpClient将HTTP请求视为不变的对象,也从来不会假定在请求执行期间改变。相反,它创建了一个原请求对象私有的可变副本,副本的属性可以基于执行上下文来更新。因此,如目标主键和请求URI的final类型的请求参数可以在请求执行之后,由检查本地HTTP上下文来决定。
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()); System.out.println("Final request method: " + req.getMethod());
Copyright @ abin Powered by: .Text and ASP.NET Theme by: .NET Monster