• Apache HttpComponents Custom protocol interceptors通过拦截器自定义压缩


    /*
     * ====================================================================
     * 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();
            }
        }
    
    }
  • 相关阅读:
    thinkphp怎么修改配置进入默认首页
    apache中怎么配置网站的默认首页
    [转]数据库更新(Update语句)查询
    ACCESS删除datagridview和数据库中的一条数据,同时更新显示的方法源码
    想ACCESS数据库插入新的用户
    C# 对象不能从 DBNull 转换为其他类型。
    windows form参数传递过程
    向ACCESS数据库中的表导入EXCEL表,在 System.Data.OleDb.OleDbException 中第一次偶然出现的“System.Data.dll”类型的异常
    C#实现Access导入导出Excel
    dataGridView1.DataSource,解决查询结果不从第一行显示,而是不断往表下面扩展问题
  • 原文地址:https://www.cnblogs.com/daxin/p/3165195.html
Copyright © 2020-2023  润新知