1、httpclient
请求头部添加 gzip支持
httpRequest.addHeader(“Accept-Encoding”, “gzip”);
举例post上传params:
因为参数数据多,可以将参数转换成string,然后利用GZIPOutputStream进行压缩
try {
List<NameValuePair> nameValuePairs = params.getBodyParams();
StringBuilder parambuilder = new StringBuilder("");
final String SEP = "\u0001";
if (params != null && !nameValuePairs.isEmpty()) {
for (NameValuePair param : nameValuePairs) {
parambuilder
.append(param.getName())
.append("=")
.append(URLEncoder.encode(
param.getValue() == null ? "" : param.getValue(),
HTTP.UTF_8)).append(SEP);
}
parambuilder.deleteCharAt(parambuilder.length() - 1);
}
LogUtils.i(TAG, parambuilder.toString());
byte[] data = parambuilder.toString().getBytes();
//gzip压缩
ByteArrayOutputStream originalContent = new ByteArrayOutputStream();
originalContent.write(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzipOut = new GZIPOutputStream(baos);
originalContent.writeTo(gzipOut);
gzipOut.finish();
params.setBodyEntity(new ByteArrayEntity(baos.toByteArray()));
2、HttpUrlConnection
原理和前面一样
StringBuilder parambuilder = new StringBuilder("");
final String SEP="\u0001";
if(params!=null && !params.isEmpty()){
for(NameValuePair param : params){
parambuilder.append(param.getName()).append("=")
.append(URLEncoder.encode(param.getValue() == null ?"":param.getValue(), HTTP.UTF_8)).append(SEP);
}
parambuilder.deleteCharAt(parambuilder.length()-1);
}
byte[] data = parambuilder.toString().getBytes();
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setConnectTimeout(5 * 1000);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept-Encoding", "gzip");
GZIPOutputStream outStream = new GZIPOutputStream(conn.getOutputStream());
outStream.write(data);/
outStream.flush();
outStream.close();