`
san_yun
  • 浏览: 2662605 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

httpclient对gzip响应内容解压

    博客分类:
  • HTTP
 
阅读更多

httpclient默认是不会对gzip格式解压的,需要手动处理一下,代码如下:

 DefaultHttpClient httpclient = new DefaultHttpClient();

        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();
                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());
        }

        // When HttpClient instance is no longer needed, 
        // shut down the connection manager to ensure
        // immediate deallocation of all system resources
        httpclient.getConnectionManager().shutdown();        

 

参考:http://alvinalexander.com/java/jwarehouse/commons-httpclient-4.0.3/httpclient/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java.shtml

http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientGZipContentCompression.java

分享到:
评论

相关推荐

    【ASP.NET编程知识】.Net Core HttpClient处理响应压缩详细.docx

    在这个例子中,我们设置了HttpClientHandler的`AutomaticDecompression`属性为`DecompressionMethods.GZip`,这样HttpClient就会自动处理GZip格式的压缩响应。 二、HttpClientHandler和DecompressionMethods枚举 ...

    HttpClient

    当HttpClient发送请求时,它可以指定接受GZIP压缩的响应,服务器在返回数据时会对数据进行压缩,HttpClient再负责解压。这不仅降低了网络带宽的使用,也提高了数据传输的效率。 `HttpClient.cpp`很可能是实现...

    Android Async-HttpClient

    - **支持gzip压缩**:自动解压服务器返回的gzip压缩内容,减少数据传输量。 - **缓存支持**:可以配置本地缓存策略,提高请求速度和减少网络流量。 - **支持Cookie**:管理Cookie,维持用户会话。 - **自定义请求头*...

    开启TOMCAT6的GZIP压缩

    GZIP压缩的工作原理是在客户端请求网页后,由服务器端将网页文件压缩后再发送给客户端,客户端接收到压缩后的文件后,由浏览器进行解压并显示页面内容。这种方式不仅可以减少传输的数据量,而且还能对动态生成的内容...

    decompress:解压用 gzip 压缩的响应体

    去取解压 解压缩用 gzip 压缩的响应体。安装 npm install --save go-fetch-decompress用法 var HttpClient = require('go-fetch');var decompress = require('go-fetch-decompress');var parseBody = require('go-...

    okhttp-3.2.0.jar和okio-1.6.0.jar,替换过期的HttpClient

    - **压缩和解压缩**:Okio可以直接处理Gzip压缩的数据,无需额外的解压步骤。 - **内存管理**:Okio的`Segment`机制能够高效地管理大块数据,减少内存分配次数,降低GC压力。 总的来说,OkHttp和Okio的组合为...

    xml 文件 压缩与解压

    - 在客户端,可能使用HTTP库如Apache HttpClient或Java的HttpURLConnection来构建POST请求,将XML数据作为请求体发送,并解析响应中的XML数据。 五、源码分析 虽然没有提供具体的源码,但根据标签“源码 工具”,...

    java抓取网页源码gzip-phproxy:PHP中的代理

    Java的HttpURLConnection或HttpClient库可以自动处理GZIP解压,但有时需要手动配置。 ```java URL url = new URL("http://example.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection...

    《实战 Web Service 压缩传输》

    在客户端,我们需要检查并更新HTTP客户端库(如Apache HttpClient、OkHttp等),确保它们能够识别和解压服务器返回的压缩响应。这通常涉及到设置请求头以表明客户端接受压缩内容,以及配置客户端库处理解压过程。 ...

    网络蜘蛛程序及java源码

    Java内置的Inflater类可以用来解压deflate编码的数据,而GZIPInputStream则用于处理gzip格式的压缩内容。 设置下载功能可能包括以下部分: 1. **URL管理**:爬虫需要一个URL队列来存储待抓取的网页链接,同时可能...

    http通用工具类

    11. **GZIP压缩**:支持自动解压服务器返回的GZIP压缩内容,提高传输效率。 12. **多线程支持**:在并发请求场景下,工具类应能有效管理线程,避免线程安全问题。 13. **错误处理**:提供统一的异常处理机制,方便...

    ESP32获取和风天气

    #include &lt;HTTPClient.h&gt; const char* ssid = "yourSSID"; const char* password = "yourPassword"; const String apiKey = "yourAPIKey"; // 替换为你的API密钥 void setup() { Serial.begin(115200); WiFi....

    android-async-http-1.4.9下载

    3. **自动处理GZIP压缩**:库会自动检测并解压服务器返回的GZIP压缩数据,减轻了开发者的工作负担。 4. **支持多种请求方法**:包括GET、POST、PUT、DELETE等,方便进行各种HTTP操作。 5. **上传和下载进度监听**:...

    slick_2.10-1.0.0-RC2.zip

    3. **自动GZIP解压**:库内置了对GZIP压缩的支持,自动处理服务器返回的GZIP压缩内容,减轻了开发者的工作负担。 4. **文件上传和下载**:提供了方便的API,支持文件的上传和下载,包括进度监听,可以实时更新...

    java操作网络数据包 论文

    例如,jpcap库可以用于数据包捕获,Apache HttpClient库可以辅助解析HTTP头部和主体,而Java标准库中的Inflater类则用于处理数据解压。此外,还可以使用第三方库如OkHttp或HttpURLConnection来发送和接收HTTP请求,...

    C#多年积累的精华常用类库,大部分可以直接用到项目开发

    C#内置了`System.IO.Compression`命名空间,其中的`GZipStream`和`DeflateStream`支持GZIP和DEFLATE压缩算法,而`ZipArchive`类允许对ZIP文件进行读写操作。这些类库可以方便地对文件或数据流进行压缩和解压缩,提高...

    Java数据压缩与传输实例.7z

    Java的HttpURLConnection或Apache HttpClient库可以用来发送HTTP请求和接收响应,实现数据的网络传输。 3. **FTP协议**:FTP(文件传输协议)也是常见的数据传输方式。Java的Commons Net库提供了FTPClient类,可以...

    基于Java的实例源码-数据压缩与传输实例.zip

    源码可能展示了如何创建服务器端监听客户端连接,接受数据,解压接收到的ZIP或GZIP文件,然后进行处理或存储。同时,客户端则负责压缩数据,建立连接,将压缩数据发送给服务器。使用`Socket`时,可以使用`...

    android省电文档

    例如,仅在WiFi或3G网络下进行网络请求,以减少对移动数据的依赖,从而节省电量。代码示例如下: ```java NetworkInfo info; int netType = info.getType(); int netSubtype = info.getSubtype(); if (netType ...

    C#常用类库最新版

    3. **HTTP处理**:HttpClient类是C#中处理HTTP请求的主要工具,可以方便地发起GET、POST等请求,获取响应数据,用于API调用和网页抓取。 4. **多线程**:System.Threading命名空间提供了Thread、Mutex、Semaphore、...

Global site tag (gtag.js) - Google Analytics