发送http请求时,设置请求头Accept-Encoding:gzip, deflate,则服务器会返回压缩的内容。
若不设置,相应内容则正常返回。
发送请求(要求服务端对response进行GZip压缩):
- import org.apache.commons.httpclient.HttpClient;
- import org.apache.commons.httpclient.HttpStatus;
- public class TestGzip {
- private final static String url = "http://localhost:8888/ltest.jsp";
- public static void main(String[] args) throws Exception{
- HttpClient http = new HttpClient();
- CustomGetMethod get = new CustomGetMethod(url);
- //添加头信息告诉服务端可以对Response进行GZip压缩
- get.setRequestHeader("Accept-Encoding", "gzip, deflate");
- try {
- int statusCode = http.executeMethod(get);
- if (statusCode != HttpStatus.SC_OK) {
- System.err.println("Method failed: "
- + get.getStatusLine());
- }
- //打印解压后的返回信息
- System.out.println(get.getResponseBodyAsString());
- } catch (Exception e) {
- System.err.println("页面无法访问");
- e.printStackTrace();
- } finally {
- get.releaseConnection();
- }
- }
- }
下面是CustomGetMethod.java的内容,getResponseBodyAsString()方法被重写,加入了解压功能
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.util.zip.GZIPInputStream;
- public class CustomGetMethod extends org.apache.commons.httpclient.methods.GetMethod{
- public CustomGetMethod(String uri) {
- super(uri);
- }
- /**
- * Get response as string whether response is GZipped or not
- *
- * @return
- * @throws IOException
- */
- @Override
- public String getResponseBodyAsString() throws IOException {
- GZIPInputStream gzin;
- if (getResponseBody() != null || getResponseStream() != null) {
- if(getResponseHeader("Content-Encoding") != null
- && getResponseHeader("Content-Encoding").getValue().toLowerCase().indexOf("gzip") > -1) {
- //For GZip response
- InputStream is = getResponseBodyAsStream();
- gzin = new GZIPInputStream(is);
- InputStreamReader isr = new InputStreamReader(gzin, getResponseCharSet());
- java.io.BufferedReader br = new java.io.BufferedReader(isr);
- StringBuffer sb = new StringBuffer();
- String tempbf;
- while ((tempbf = br.readLine()) != null) {
- sb.append(tempbf);
- sb.append("\r\n");
- }
- isr.close();
- gzin.close();
- return sb.toString();
- } else {
- //For deflate response
- return super.getResponseBodyAsString();
- }
- } else {
- return null;
- }
- }
- }