【问题标题】:OkHttp gzip post bodyOkHttp gzip 帖子正文
【发布时间】:2014-12-09 05:59:44
【问题描述】:

我正在尝试将我的 Android 项目迁移到 OkHttp

我想知道 OkHttp 是否会使用 gzip 压缩我的 POST 请求的正文?

我是这样使用它的(来自主页上的示例):

RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
        .url(url)
        .post(body)
        .build();

RequestBody 如果它“足够大”,它实际上会压缩 json,还是我需要手动执行此操作?就像我之前对AndroidHttpClient 所做的那样:

AndroidHttpClient.getCompressedEntity(json, context.getContentResolver())

如果我需要手动操作,最好的方法是什么?

谢谢!

【问题讨论】:

    标签: android gzip okhttp


    【解决方案1】:

    根据 OkHttp 的 GitHub 问题,我们应该手动完成:

    https://github.com/square/okhttp/issues/350

    “目前您最好的选择是手动执行:压缩内容并添加 Content-Encoding: gzip。”

    这就是我现在的做法:

    byte[] data = json.getBytes("UTF-8");
    ByteArrayOutputStream arr = new ByteArrayOutputStream();
    OutputStream zipper = new GZIPOutputStream(arr);
    zipper.write(data);
    zipper.close();
    
    RequestBody body = RequestBody.create(JSON, arr.toByteArray());
    Request request = new Request.Builder()
            .url(url)
            .post(body)
            .header("Content-Encoding", "gzip")
            .build();
    

    我从这里获取了 AndroidHttpClient 的代码,并在没有 ByteArrayEntity 的情况下内联使用它: http://grepcode.com/file/repo1.maven.org/maven2/org.robolectric/android-all/4.2.2_r1.2-robolectric-0/android/net/http/AndroidHttpClient.java#AndroidHttpClient.getCompressedEntity%28byte%5B%5D%2Candroid.content.ContentResolver%29

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2017-02-02
      • 2020-01-29
      • 1970-01-01
      • 2011-10-10
      相关资源
      最近更新 更多