我使用this example中的代码从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
进行最佳压缩,以及如何在服务器上解压缩(我正在使用{{1}})?
答案 0 :(得分:13)
根据这个http://android-developers.blogspot.com/2011/09/androids-http-clients.html如果您使用Gingerbread或更高版本,HttpURLConnection会自动添加gzip压缩:
在Gingerbread中,我们添加了透明的响应压缩。 HttpURLConnection会自动将此标头添加到传出 请求,并处理相应的响应:
Accept-Encoding:gzip
您的网络服务器需要处理gzip压缩。
编辑:
Serve Gzipped content with Java Servlets
编辑2:
使用DefaultHttpClient Enabling GZip compression with HttpClient
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的gzipping的另一个Stackoverflow问题。您需要在发布数据之前手动gzip数据,因为正常的http / gzip操作是将gzip压缩内容发送到客户端的服务器。