OkHttp gzip帖子的身体

时间:2014-10-14 12:30:38

标签: android gzip okhttp

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

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

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

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

这个RequestBody是否实际上是jzip json,如果它足够大",或者我是否需要手动执行此操作?就像我之前使用AndroidHttpClient一样:

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

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

谢谢!

1 个答案:

答案 0 :(得分:12)

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

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

"目前您最好的选择是手动执行:压缩内容并添加内容编码: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