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
相关推荐
在这个例子中,我们设置了HttpClientHandler的`AutomaticDecompression`属性为`DecompressionMethods.GZip`,这样HttpClient就会自动处理GZip格式的压缩响应。 二、HttpClientHandler和DecompressionMethods枚举 ...
当HttpClient发送请求时,它可以指定接受GZIP压缩的响应,服务器在返回数据时会对数据进行压缩,HttpClient再负责解压。这不仅降低了网络带宽的使用,也提高了数据传输的效率。 `HttpClient.cpp`很可能是实现...
- **支持gzip压缩**:自动解压服务器返回的gzip压缩内容,减少数据传输量。 - **缓存支持**:可以配置本地缓存策略,提高请求速度和减少网络流量。 - **支持Cookie**:管理Cookie,维持用户会话。 - **自定义请求头*...
GZIP压缩的工作原理是在客户端请求网页后,由服务器端将网页文件压缩后再发送给客户端,客户端接收到压缩后的文件后,由浏览器进行解压并显示页面内容。这种方式不仅可以减少传输的数据量,而且还能对动态生成的内容...
去取解压 解压缩用 gzip 压缩的响应体。安装 npm install --save go-fetch-decompress用法 var HttpClient = require('go-fetch');var decompress = require('go-fetch-decompress');var parseBody = require('go-...
- **压缩和解压缩**:Okio可以直接处理Gzip压缩的数据,无需额外的解压步骤。 - **内存管理**:Okio的`Segment`机制能够高效地管理大块数据,减少内存分配次数,降低GC压力。 总的来说,OkHttp和Okio的组合为...
- 在客户端,可能使用HTTP库如Apache HttpClient或Java的HttpURLConnection来构建POST请求,将XML数据作为请求体发送,并解析响应中的XML数据。 五、源码分析 虽然没有提供具体的源码,但根据标签“源码 工具”,...
Java的HttpURLConnection或HttpClient库可以自动处理GZIP解压,但有时需要手动配置。 ```java URL url = new URL("http://example.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection...
在客户端,我们需要检查并更新HTTP客户端库(如Apache HttpClient、OkHttp等),确保它们能够识别和解压服务器返回的压缩响应。这通常涉及到设置请求头以表明客户端接受压缩内容,以及配置客户端库处理解压过程。 ...
Java内置的Inflater类可以用来解压deflate编码的数据,而GZIPInputStream则用于处理gzip格式的压缩内容。 设置下载功能可能包括以下部分: 1. **URL管理**:爬虫需要一个URL队列来存储待抓取的网页链接,同时可能...
11. **GZIP压缩**:支持自动解压服务器返回的GZIP压缩内容,提高传输效率。 12. **多线程支持**:在并发请求场景下,工具类应能有效管理线程,避免线程安全问题。 13. **错误处理**:提供统一的异常处理机制,方便...
#include <HTTPClient.h> const char* ssid = "yourSSID"; const char* password = "yourPassword"; const String apiKey = "yourAPIKey"; // 替换为你的API密钥 void setup() { Serial.begin(115200); WiFi....
3. **自动处理GZIP压缩**:库会自动检测并解压服务器返回的GZIP压缩数据,减轻了开发者的工作负担。 4. **支持多种请求方法**:包括GET、POST、PUT、DELETE等,方便进行各种HTTP操作。 5. **上传和下载进度监听**:...
3. **自动GZIP解压**:库内置了对GZIP压缩的支持,自动处理服务器返回的GZIP压缩内容,减轻了开发者的工作负担。 4. **文件上传和下载**:提供了方便的API,支持文件的上传和下载,包括进度监听,可以实时更新...
例如,jpcap库可以用于数据包捕获,Apache HttpClient库可以辅助解析HTTP头部和主体,而Java标准库中的Inflater类则用于处理数据解压。此外,还可以使用第三方库如OkHttp或HttpURLConnection来发送和接收HTTP请求,...
C#内置了`System.IO.Compression`命名空间,其中的`GZipStream`和`DeflateStream`支持GZIP和DEFLATE压缩算法,而`ZipArchive`类允许对ZIP文件进行读写操作。这些类库可以方便地对文件或数据流进行压缩和解压缩,提高...
Java的HttpURLConnection或Apache HttpClient库可以用来发送HTTP请求和接收响应,实现数据的网络传输。 3. **FTP协议**:FTP(文件传输协议)也是常见的数据传输方式。Java的Commons Net库提供了FTPClient类,可以...
源码可能展示了如何创建服务器端监听客户端连接,接受数据,解压接收到的ZIP或GZIP文件,然后进行处理或存储。同时,客户端则负责压缩数据,建立连接,将压缩数据发送给服务器。使用`Socket`时,可以使用`...
例如,仅在WiFi或3G网络下进行网络请求,以减少对移动数据的依赖,从而节省电量。代码示例如下: ```java NetworkInfo info; int netType = info.getType(); int netSubtype = info.getSubtype(); if (netType ...
3. **HTTP处理**:HttpClient类是C#中处理HTTP请求的主要工具,可以方便地发起GET、POST等请求,获取响应数据,用于API调用和网页抓取。 4. **多线程**:System.Threading命名空间提供了Thread、Mutex、Semaphore、...