Apache HttpComponents Custom protocol interceptors通过拦截器自定义压缩
2013-07-01 17:12
197 查看
/* * ==================================================================== * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.http.examples.client; import java.io.IOException; import org.apache.http.Header; import org.apache.http.HeaderElement; import org.apache.http.HttpEntity; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestInterceptor; import org.apache.http.HttpResponse; import org.apache.http.HttpResponseInterceptor; import org.apache.http.client.entity.GzipDecompressingEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; /** * Demonstration of the use of protocol interceptors to transparently * modify properties of HTTP messages sent / received by the HTTP client. * <p/> * In this particular case HTTP client is made capable of transparent content * GZIP compression by adding two protocol interceptors: a request interceptor * that adds 'Accept-Encoding: gzip' header to all outgoing requests and * a response interceptor that automatically expands compressed response * entities by wrapping them with a uncompressing decorator class. The use of * protocol interceptors makes content compression completely transparent to * the consumer of the {@link org.apache.http.client.HttpClient HttpClient} * interface. */ public class ClientGZipContentCompression { public final static void main(String[] args) throws Exception { DefaultHttpClient httpclient = new DefaultHttpClient(); try { httpclient.addRequestInterceptor(new HttpRequestInterceptor() { public void process( final HttpRequest request, final HttpContext context) throws HttpException, IOException { if (!request.containsHeader("Accept-Encoding")) { request.addHeader("Accept-Encoding", "gzip"); } } }); httpclient.addResponseInterceptor(new HttpResponseInterceptor() { public void process( final HttpResponse response, final HttpContext context) throws HttpException, IOException { HttpEntity entity = response.getEntity(); if (entity != null) { Header ceheader = entity.getContentEncoding(); if (ceheader != null) { HeaderElement[] codecs = ceheader.getElements(); for (int i = 0; i < codecs.length; i++) { if (codecs[i].getName().equalsIgnoreCase("gzip")) { response.setEntity( new GzipDecompressingEntity(response.getEntity())); return; } } } } } }); HttpGet httpget = new HttpGet("http://www.apache.org/"); // Execute HTTP request System.out.println("executing request " + httpget.getURI()); HttpResponse response = httpclient.execute(httpget); System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); System.out.println(response.getLastHeader("Content-Encoding")); System.out.println(response.getLastHeader("Content-Length")); System.out.println("----------------------------------------"); HttpEntity entity = response.getEntity(); if (entity != null) { String content = EntityUtils.toString(entity); System.out.println(content); System.out.println("----------------------------------------"); System.out.println("Uncompressed size: "+content.length()); } } finally { // When HttpClient instance is no longer needed, // shut down the connection manager to ensure // immediate deallocation of all system resources httpclient.getConnectionManager().shutdown(); } } }
相关文章推荐
- C# 反射通过GetCustomAttributes方法,获得自定义特性
- 通过修改 Apache 的配置文件 htaccess 文件实现自定义404页面
- HttpComponents(Apache HttpComponents Client 4.1.3)通过代理访问网页的设置方法
- 【Lucene】Lucene通过CustomScoreQuery实现自定义评分
- 通过自定义注解或拦截器实现APP调用后接口全局权限验证
- C# 反射通过GetCustomAttributes方法,获得自定义特性
- Struts2通过自定义拦截器实现登录之后跳转到原页面
- 通过Spring MVC 的自定义拦截器实现灵活的登录拦截
- C# 反射通过GetCustomAttributes方法,获得自定义特性
- HttpComponents(Apache HttpComponents Client 4.1.3)通过Post方式访问网页或传输参数
- 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cookie 读写; 自定义 HttpFilter; 其他
- 通过Spring MVC 的自定义拦截器实现灵活的登录拦截
- 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cookie 读写; 自定义 HttpFilter; 其他
- 通过配置Apache,利用压缩网页来提升网站浏览速度
- Enhancing Android UI with Custom Views 通过自定义view来让你的UI更屌!
- 通过Apache的HttpClient来实现HTTP的GET方法(自定义URI)
- 通过配置Apache,利用压缩网页来提升网站浏览速度
- mybatis拦截器打印sql且通过自定义注解获取sql开发人信息
- 通过 apache.commons.compress 压缩和下载文件