我正在使用此示例中的代码从发送一个JSONObject到我的Web服务器。在这里复制代码Android client
JSONObject
Android client
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在将其发送到服务器之前对其进行最佳压缩,以及如何在服务器(我正在使用Java Servlets)上对其进行解压缩?
Java Servlets
根据此http://android-developers.blogspot.com/2011/09/androids-http- clients.html如果您使用的是Gingerbread或更高版本,则HttpURLConnection会自动添加gzip压缩:
在Gingerbread中,我们添加了透明响应压缩。HttpURLConnection将自动将此标头添加到传出请求中,并处理相应的响应: 接受编码:gzip
在Gingerbread中,我们添加了透明响应压缩。HttpURLConnection将自动将此标头添加到传出请求中,并处理相应的响应:
接受编码:gzip
然后,您的网络服务器将需要处理gzip压缩。
编辑: 使用Java Servlet提供压缩的内容 “使用Java Servlet服务压缩的内容”)
编辑2: 使用DefaultHttpClient进行Gzip压缩使用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: 这是另一个关于Java的HTTPClient的内容gzipPOST请求的gzip。您需要在发布数据之前手动gzip压缩数据,因为正常的http /gzip操作是服务器将gzip压缩的内容发送到客户端。