OkHttp gzip帖子的身体

ull*_*trm 8 android gzip okhttp

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

我想知道的是,如果OkHttp将POST使用gzip 压缩我的请求的主体?

我正在使用它(从主页上的示例):

RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
        .url(url)
        .post(body)
        .build();
Run Code Online (Sandbox Code Playgroud)

RequestBody如果json"足够大",它是否真的会对json进行gzip,或者我是否需要手动执行此操作?像我之前做过的AndroidHttpClient那样:

AndroidHttpClient.getCompressedEntity(json, context.getContentResolver())
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

ull*_*trm 13

根据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();
Run Code Online (Sandbox Code Playgroud)

我从这里获取AndroidHttpClient中的代码,并且只使用内联而没有ByteArrayEntity:http://grepcode.com/file/repo1.maven.org/maven2/org.robolectric/android-all/4.2.2_r1.2 -robolectric-0 /机器人/净/ HTTP/AndroidHttpClient.java#AndroidHttpClient.getCompressedEntity%28byte%5B%5D%2Candroid.content.ContentResolver%29


小智 1

知道现在回答已经太晚了,但如果将来有人可能需要它。

\n

一种更新且更简单的方法是执行以下操作

\n
val request = Request.Builder().url("\xe2\x80\xa6")\\ .addHeader("Content-Encoding", "gzip")\\ .post(uncompressedBody.gzip())\\ .build()\n
Run Code Online (Sandbox Code Playgroud)\n

更多详情可在这找到

\n