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一种更新且更简单的方法是执行以下操作
\nval request = Request.Builder().url("\xe2\x80\xa6")\\ .addHeader("Content-Encoding", "gzip")\\ .post(uncompressedBody.gzip())\\ .build()\nRun Code Online (Sandbox Code Playgroud)\n更多详情可在这找到
\n| 归档时间: |
|
| 查看次数: |
7366 次 |
| 最近记录: |