`
jayyanzhang2010
  • 浏览: 377731 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HttpCLient实现对被GZip压缩过的Response进行解压

 
阅读更多

发送请求(要求服务端对response进行GZip压缩):

Java代码  收藏代码
  1. import org.apache.commons.httpclient.HttpClient;  
  2. import org.apache.commons.httpclient.HttpStatus;  
  3.   
  4. public class TestGzip {  
  5.   
  6.     private final static String url = "http://localhost:8888/ltest.jsp";  
  7.   
  8.     public static void main(String[] args) throws Exception{  
  9.         HttpClient http = new HttpClient();  
  10.         CustomGetMethod get = new CustomGetMethod(url);  
  11.           
  12.        //添加头信息告诉服务端可以对Response进行GZip压缩  
  13.         get.setRequestHeader("Accept-Encoding""gzip, deflate");  
  14.         try {  
  15.             int statusCode = http.executeMethod(get);  
  16.             if (statusCode != HttpStatus.SC_OK) {  
  17.                 System.err.println("Method failed: "  
  18.                         + get.getStatusLine());  
  19.             }  
  20.   
  21.             //打印解压后的返回信息  
  22.             System.out.println(get.getResponseBodyAsString());  
  23.         } catch (Exception e) {  
  24.             System.err.println("页面无法访问");  
  25.             e.printStackTrace();  
  26.         } finally {  
  27.         get.releaseConnection();  
  28.         }  
  29.     }  
  30. }  

 

下面是CustomGetMethod.java的内容,getResponseBodyAsString()方法被重写,加入了解压功能

Java代码  收藏代码
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.io.InputStreamReader;  
  4. import java.util.zip.GZIPInputStream;  
  5.   
  6.   
  7.   
  8. public class CustomGetMethod extends org.apache.commons.httpclient.methods.GetMethod{  
  9.       
  10.     public CustomGetMethod(String uri) {  
  11.         super(uri);  
  12.     }  
  13.   
  14.       
  15.     /** 
  16.      * Get response as string whether response is GZipped or not 
  17.      *  
  18.      * @return 
  19.      * @throws IOException 
  20.      */  
  21.     @Override  
  22.     public String getResponseBodyAsString() throws IOException {  
  23.         GZIPInputStream gzin;  
  24.         if (getResponseBody() != null || getResponseStream() != null) {  
  25.               
  26.             if(getResponseHeader("Content-Encoding") != null  
  27.                      && getResponseHeader("Content-Encoding").getValue().toLowerCase().indexOf("gzip") > -1) {  
  28.                     //For GZip response  
  29.                     InputStream is = getResponseBodyAsStream();  
  30.                     gzin = new GZIPInputStream(is);  
  31.                       
  32.                     InputStreamReader isr = new InputStreamReader(gzin, getResponseCharSet());   
  33.                     java.io.BufferedReader br = new java.io.BufferedReader(isr);  
  34.                     StringBuffer sb = new StringBuffer();  
  35.                     String tempbf;  
  36.                     while ((tempbf = br.readLine()) != null) {  
  37.                         sb.append(tempbf);  
  38.                         sb.append("\r\n");  
  39.                     }  
  40.                     isr.close();  
  41.                     gzin.close();  
  42.                     return sb.toString();  
  43.                 }  else {  
  44.                 //For deflate response  
  45.                 return super.getResponseBodyAsString();  
  46.             }  
  47.         } else {  
  48.             return null;  
  49.         }  
  50.     }  
  51.   
  52. }  
分享到:
评论

相关推荐

    【ASP.NET编程知识】.Net Core HttpClient处理响应压缩详细.docx

    在这个例子中,我们设置了HttpClientHandler的`AutomaticDecompression`属性为`DecompressionMethods.GZip`,这样HttpClient就会自动处理GZip格式的压缩响应。 二、HttpClientHandler和DecompressionMethods枚举 ...

    Delphi的GZIP解压示例源代码(亲测可用)

    在IT行业中,Delphi是一种流行的面向对象的编程...总之,这个Delphi的GZIP解压示例源代码是一个实用的学习工具,它展示了在Delphi中如何利用第三方库进行文件解压缩,对于提升开发者处理压缩数据的能力具有实际意义。

    HttpClient 卡死 response 为 null - 帐前卒 - CSDN1

    在使用Apache HttpClient库进行HTTP请求时,可能会遇到`HttpClient`返回`response`为`null`的问题,这通常意味着请求没有成功地完成或者某些资源没有被正确处理。在本篇文章中,我们将深入探讨这个问题的原因和解决...

    HttpClient

    当HttpClient发送请求时,它可以指定接受GZIP压缩的响应,服务器在返回数据时会对数据进行压缩,HttpClient再负责解压。这不仅降低了网络带宽的使用,也提高了数据传输的效率。 `HttpClient.cpp`很可能是实现...

    HttpClient4.5 实现https忽略SSL证书验证

    使用HttpClient4.5实现https请求忽略SSL证书验证工具类

    HttpClient实现文件下载

    ### HttpClient 实现文件下载 #### 一、简介与原理 在Java开发中,经常会遇到需要通过HTTP协议来获取网络资源的需求,例如从Web服务器下载文件。Apache HttpClient 是一个用于发送HTTP请求的Java类库,它提供了...

    HttpClient实现远程下载

    通过HttpClient实现远程下载,本例子通过java代码实现

    安卓文件下载上传解压相关-Android使用HttpClient实现上传下载功能并监控进度.rar

    这个压缩包"安卓文件下载上传解压相关-Android使用HttpClient实现上传下载功能并监控进度.rar"提供了使用HttpClient实现这些功能的示例代码。HttpClient是一个Java库,它允许开发者创建HTTP请求,支持包括下载和上传...

    httpclient实现webservice客户端

    HttpClient库广泛应用于构建Java应用程序,尤其是那些需要与Web服务进行交互的程序。本篇文章将详细介绍如何使用HttpClient实现WebService客户端。 首先,我们需要了解WebService的基本概念。WebService是一种基于...

    HttpClient实现POST GET和文件下载

    本篇文章将深入探讨如何利用HttpClient实现这些功能,并提供实战代码示例。 首先,让我们了解GET和POST两种HTTP请求方法的基本概念。GET是HTTP协议中最常见的请求方式,用于获取服务器上的资源,所有数据都包含在...

    windowsphone Gzip 压缩

    在Web开发中,Gzip通常被服务器用于对HTML、CSS、JavaScript等静态资源进行压缩,然后再发送到客户端(如Windows Phone设备),从而降低网络带宽消耗,加快页面加载速度。 在Windows Phone平台上,开发人员可能需要...

    Android使用HttpClient实现上传下载功能并监控进度

    同样,我们可以实现`HttpResponse`的监听器,当数据被接收时,计算下载进度并更新UI。注意,为了确保数据的完整性和避免内存溢出,我们通常会将接收到的数据写入到文件流中。 下面是一个简化的上传示例: ```java ...

    httpclient所有jar包以及实现类

    通过熟练掌握HttpClient的使用,后台程序员可以更高效地实现与远程服务器的通信,特别是处理JSON数据的场景。 总的来说,"HTTPclient.jar"包含了实现HTTP请求和响应处理所需的所有类和接口。结合JSON解析库,后台...

    java实现HttpClient异步请求资源的方法

    本篇文章将详细介绍如何使用Java的HttpClient实现异步请求资源。 首先,让我们了解什么是异步请求。在同步请求中,调用一个API或发送一个HTTP请求后,程序会等待响应返回,然后继续执行后续代码。而异步请求则不同...

    开启TOMCAT6的GZIP压缩

    GZIP压缩的工作原理是在客户端请求网页后,由服务器端将网页文件压缩后再发送给客户端,客户端接收到压缩后的文件后,由浏览器进行解压并显示页面内容。这种方式不仅可以减少传输的数据量,而且还能对动态生成的内容...

    httpclient实现跨项目数据交互

    `Httpclient` 是一个强大的工具,可以实现跨项目间的数据通信。本文将深入探讨如何使用 `Httpclient` 进行HTTP请求,实现不同项目之间的数据交换。 `Httpclient` 是Apache HttpClient库,它为Java开发者提供了全面...

    httpClient,JAVA访问http request response

    - 在实际开发中,HttpClient常与其他工具配合使用,如Apache Commons IO库进行文件操作,或者使用JUnit进行单元测试。 9. **最佳实践**: - 关闭资源:请求完成后记得关闭响应实体和连接,避免内存泄漏。 - 使用...

    HttpClient重新封装的HttpClient类

    在Web开发中,HttpClient常常被用于网页抓取、API调用和其他网络通信任务。本篇文章将深入探讨重新封装的HttpClient类,以及如何利用它进行高效且灵活的网络请求。 首先,我们来看一下`HttpClient`类的基本用法。...

    java实现httpClient样例

    这个样例项目旨在帮助初学者理解如何在Java中使用HttpClient来与Web服务器进行交互。 在JavaHttpProject这个项目中,你可以找到以下关键知识点: 1. **HttpClient的创建**:首先,你需要创建一个HttpClient实例。...

Global site tag (gtag.js) - Google Analytics