我使用
this example中的代码从Android客户端向我的Web服务器发送JSONObject.在此处重现代码
import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; int TIMEOUT_MILLISEC = 10000; // = 10 seconds HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams,TIMEOUT_MILLISEC); HttpConnectionParams.setSoTimeout(httpParams,TIMEOUT_MILLISEC); HttpClient client = new DefaultHttpClient(httpParams); HttpPost request = new HttpPost(serverUrl); request.setEntity(new ByteArrayEntity( postMessage.toString().getBytes("UTF8"))); HttpResponse response = client.execute(request);
我的问题
如何在将JSONObject发送到服务器之前对JSONObject进行最佳压缩以及如何在服务器上解压缩它(我正在使用Java Servlets)?
根据这个
http://android-developers.blogspot.com/2011/09/androids-http-clients.html如果你使用姜饼或以后HttpURLConnection自动添加gzip压缩:
In Gingerbread,we added transparent response compression.
HttpURLConnection will automatically add this header to outgoing
requests,and handle the corresponding response:Accept-Encoding: gzip
然后,您的网络服务器需要处理gzip压缩.
编辑:
Serve Gzipped content with Java Servlets
编辑2:
使用DefaultHttpClient Enabling GZip compression with HttpClient进行Gzip压缩
private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding"; private static final String ENCODING_GZIP = "gzip"; final DefaultHttpClient client = new DefaultHttpClient(manager,parameters); client.addRequestInterceptor(new HttpRequestInterceptor() { public void process(HttpRequest request,HttpContext context) { // Add header to accept gzip content if (!request.containsHeader(HEADER_ACCEPT_ENCODING)) { request.addHeader(HEADER_ACCEPT_ENCODING,ENCODING_GZIP); } } }); client.addResponseInterceptor(new HttpResponseInterceptor() { public void process(HttpResponse response,HttpContext context) { // Inflate any responses compressed with gzip final HttpEntity entity = response.getEntity(); final Header encoding = entity.getContentEncoding(); if (encoding != null) { for (HeaderElement element : encoding.getElements()) { if (element.getName().equalsIgnoreCase(ENCODING_GZIP)) { response.setEntity(new InflatingEntity(response.getEntity())); break; } } } } });
编辑3:
这是关于邮件内容GZip POST request with HTTPClient in Java的gzip的另一个Stackoverflow问题.您需要在发布之前手动gzip数据,因为正常的http / gzip操作是将gzip压缩内容发送到客户端的服务器.