我正在尝试将我的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())
如果我需要手动完成,最好的方法是什么?
谢谢!
答案 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