java - Android/Java 中使用 GZip 编码的 HttpGet

标签 java gzip http-get

我在我的服务器上运行 MVC 4,为了为我的用户保存一些数据,我想我应该启用 GZip 编码,为此我简单地使用了:

(C#)

Response.AddHeader("Content-Encoding", "gzip"); 
Response.Filter = new GZipStream(Response.Filter, CompressionMode.Compress);

在我的 Android 应用程序中,我使用:

(Java)

String response = "";
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
    HttpResponse execute = client.execute(httpGet);
    InputStream content = execute.getEntity().getContent();

    BufferedReader buffer = new BufferedReader(
        new InputStreamReader(content));
    String s = "";
    while ((s = buffer.readLine()) != null) {
        response += s;
    }

} catch (Exception e) {
    e.printStackTrace();
}
return response;

当我使用 GZip 时,Java 代码会崩溃并导致 GC 运行,我从来没有足够的耐心等待它返回。

当我从服务器上取下 GZip 时,它运行得非常好。获取响应的函数立即返回,没有任何问题。

我尝试将其添加到java代码中:

httpGet.addHeader("Accept-Encoding", "gzip");

没有成功。

问题是,有什么我没有得到的吗?如果使用 GZip,我可以不将响应放入流中吗?我是否打算使用该流并在之后解压缩它?

我做错了什么?

最佳答案

而不是使用

DefaultHttpClient client = new DefaultHttpClient();

你可以使用

ContentEncodingHttpClient client = new ContentEncodingHttpClient();

它是 DefaultHttpClient 的子类,支持 GZIP 内容。 为此,您需要 Apache HttpClient 4.1。

如果您有 Apache HttpClient 4.2,则应该使用

DecompressingHttpClient client = new DecompressingHttpClient();

如果您有 Apache HttpClient 4.3,则应该使用 HttpClientBuilder

关于java - Android/Java 中使用 GZip 编码的 HttpGet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22223396/

相关文章:

java - Galileo 可以使用在 Helios 中创建的工作区/项目吗?

.htaccess - htaccess - 如何强制客户端浏览器清除缓存?

java - CCCallFunc 中 cocos2d-android 中的 NoSuchMethodException

java - 创建jar文件时@Transactional(rollbackfor={null})

Python gzip : is there a way to decompress from a string?

android - http 服务器不遵守接受编码 : gzip unless User-Agent is known browser

http - Google 是否可以索引 HTTP GET 变量

http - 如何使用 Matlab 或 Octave 进行 HTTP GET 或 POST?

ip - 来自同一台机器的 GET 和 POST 请求可以来自不同的 IP 吗?

java - 为什么 array[idx++]+ ="a"在 Java 8 中增加 idx 一次,但在 Java 9 和 10 中增加两次?