- 浏览: 489276 次
- 性别:
- 来自: 苏州
-
文章分类
最新评论
-
tianya2010ji:
谢了 工作了好多年,今天刚好用到它。
使用SPRING中的线程池ThreadPoolTaskExecutor实现JAVA并发 -
Mr.Bruce:
有用
jquery在加载完iframe的内容后才进行下一步操作 -
lyyltt:
有一个外部引用谷歌api没办法download
好东西 - JS生成多种图形,饼状图,柱状图,折线图,雷达图 -
bluky999:
这里写错了应该。。。--sm-plugins=......,+ ...
tigase自定义插件的开发与配置 -
lyy3323:
spring的 threadpool 没有submit方法呀 ...
使用SPRING中的线程池ThreadPoolTaskExecutor实现JAVA并发
发送请求(要求服务端对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; } } }
评论
9 楼
rabbit0708
2013-03-02
写的很好,学习了。谢谢
8 楼
落樱神斧
2011-11-10
EntityUtils.toString(new GzipDecompressingEntity(responseEntity));
//responseEntity为原始的返回...
一句话解决....
//responseEntity为原始的返回...
一句话解决....
7 楼
zhoulei984623
2011-11-03
难得你们公司也有这方面的需求,看来是个不错的公司。
javajava22 写道
public String getResponseBodyAsString(HttpEntity entity ) throws IOException {
GZIPInputStream gzin = null;
//For GZip response
InputStream is = entity.getContent();
gzin = new GZIPInputStream(is);
//InputStreamReader isr = new InputStreamReader(gzin, "utf8");
//java.io.BufferedReader br = new java.io.BufferedReader(isr);
StringBuffer sb = new StringBuffer();
List<byte[]> arr =new ArrayList<byte[]>();
try {
byte[] by= new byte[1024];
int actlength=0;
while((actlength=gzin.read(by))!=-1){
byte[] b=Arrays.copyOf(by, actlength);;
arr.add(b);
// String s= new String(b,"utf8");
// System.out.print(s);
// System.out.println("@@@@@@@@@");
// sb.append(s);
// actlength = 0;
}
//
// StringBuffer sb = new StringBuffer();
// String tempbf;
// while ((tempbf = br.readLine()) != null) {
// sb.append(tempbf);
// sb.append("\r\n");
// }
}
catch (java.io.EOFException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
int actlength=0;
// List<byte[]> arr =new ArrayList<byte[]>();
actlength = 0;
for(byte[] b : arr){
actlength+=b.length;
}
byte[] by1= new byte[actlength];
actlength = 0;
for(byte[] b : arr){
System.arraycopy(b,0,by1,actlength,b.length);
actlength+=b.length;
//Arrays.
}
String s= new String(by1,"utf8");
sb.append(s);
}
// isr.close();
// gzin.close();
return sb.toString();
// return "";
//For deflate response
}
这样就ok了,可以处理中文
GZIPInputStream gzin = null;
//For GZip response
InputStream is = entity.getContent();
gzin = new GZIPInputStream(is);
//InputStreamReader isr = new InputStreamReader(gzin, "utf8");
//java.io.BufferedReader br = new java.io.BufferedReader(isr);
StringBuffer sb = new StringBuffer();
List<byte[]> arr =new ArrayList<byte[]>();
try {
byte[] by= new byte[1024];
int actlength=0;
while((actlength=gzin.read(by))!=-1){
byte[] b=Arrays.copyOf(by, actlength);;
arr.add(b);
// String s= new String(b,"utf8");
// System.out.print(s);
// System.out.println("@@@@@@@@@");
// sb.append(s);
// actlength = 0;
}
//
// StringBuffer sb = new StringBuffer();
// String tempbf;
// while ((tempbf = br.readLine()) != null) {
// sb.append(tempbf);
// sb.append("\r\n");
// }
}
catch (java.io.EOFException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
int actlength=0;
// List<byte[]> arr =new ArrayList<byte[]>();
actlength = 0;
for(byte[] b : arr){
actlength+=b.length;
}
byte[] by1= new byte[actlength];
actlength = 0;
for(byte[] b : arr){
System.arraycopy(b,0,by1,actlength,b.length);
actlength+=b.length;
//Arrays.
}
String s= new String(by1,"utf8");
sb.append(s);
}
// isr.close();
// gzin.close();
return sb.toString();
// return "";
//For deflate response
}
这样就ok了,可以处理中文
6 楼
javajava22
2011-11-03
public String getResponseBodyAsString(HttpEntity entity ) throws IOException {
GZIPInputStream gzin = null;
//For GZip response
InputStream is = entity.getContent();
gzin = new GZIPInputStream(is);
//InputStreamReader isr = new InputStreamReader(gzin, "utf8");
//java.io.BufferedReader br = new java.io.BufferedReader(isr);
StringBuffer sb = new StringBuffer();
List<byte[]> arr =new ArrayList<byte[]>();
try {
byte[] by= new byte[1024];
int actlength=0;
while((actlength=gzin.read(by))!=-1){
byte[] b=Arrays.copyOf(by, actlength);;
arr.add(b);
// String s= new String(b,"utf8");
// System.out.print(s);
// System.out.println("@@@@@@@@@");
// sb.append(s);
// actlength = 0;
}
//
// StringBuffer sb = new StringBuffer();
// String tempbf;
// while ((tempbf = br.readLine()) != null) {
// sb.append(tempbf);
// sb.append("\r\n");
// }
}
catch (java.io.EOFException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
int actlength=0;
// List<byte[]> arr =new ArrayList<byte[]>();
actlength = 0;
for(byte[] b : arr){
actlength+=b.length;
}
byte[] by1= new byte[actlength];
actlength = 0;
for(byte[] b : arr){
System.arraycopy(b,0,by1,actlength,b.length);
actlength+=b.length;
//Arrays.
}
String s= new String(by1,"utf8");
sb.append(s);
}
// isr.close();
// gzin.close();
return sb.toString();
// return "";
//For deflate response
}
这样就ok了,可以处理中文
GZIPInputStream gzin = null;
//For GZip response
InputStream is = entity.getContent();
gzin = new GZIPInputStream(is);
//InputStreamReader isr = new InputStreamReader(gzin, "utf8");
//java.io.BufferedReader br = new java.io.BufferedReader(isr);
StringBuffer sb = new StringBuffer();
List<byte[]> arr =new ArrayList<byte[]>();
try {
byte[] by= new byte[1024];
int actlength=0;
while((actlength=gzin.read(by))!=-1){
byte[] b=Arrays.copyOf(by, actlength);;
arr.add(b);
// String s= new String(b,"utf8");
// System.out.print(s);
// System.out.println("@@@@@@@@@");
// sb.append(s);
// actlength = 0;
}
//
// StringBuffer sb = new StringBuffer();
// String tempbf;
// while ((tempbf = br.readLine()) != null) {
// sb.append(tempbf);
// sb.append("\r\n");
// }
}
catch (java.io.EOFException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
int actlength=0;
// List<byte[]> arr =new ArrayList<byte[]>();
actlength = 0;
for(byte[] b : arr){
actlength+=b.length;
}
byte[] by1= new byte[actlength];
actlength = 0;
for(byte[] b : arr){
System.arraycopy(b,0,by1,actlength,b.length);
actlength+=b.length;
//Arrays.
}
String s= new String(by1,"utf8");
sb.append(s);
}
// isr.close();
// gzin.close();
return sb.toString();
// return "";
//For deflate response
}
这样就ok了,可以处理中文
5 楼
javajava22
2011-11-02
这个读取不到不会返回 -1 ,直接抛出异常
4 楼
javajava22
2011-11-02
public String getResponseBodyAsString(HttpEntity entity ) throws IOException {
GZIPInputStream gzin = null;
//For GZip response
InputStream is = entity.getContent();
gzin = new GZIPInputStream(is);
//InputStreamReader isr = new InputStreamReader(gzin, "utf8");
//java.io.BufferedReader br = new java.io.BufferedReader(isr);
StringBuffer sb = new StringBuffer();
try {
byte[] by= new byte[1024];
int actlength=0;
while((actlength=gzin.read(by))!=-1){
byte[] b=Arrays.copyOf(by, actlength);;
String s= new String(b,"utf8");
System.out.println(s);
sb.append(s);
}
//
// StringBuffer sb = new StringBuffer();
// String tempbf;
// while ((tempbf = br.readLine()) != null) {
// sb.append(tempbf);
// sb.append("\r\n");
// }
}
catch (java.io.EOFException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
// isr.close();
// gzin.close();
return sb.toString();
// return "";
//For deflate response
}
GZIPInputStream gzin = null;
//For GZip response
InputStream is = entity.getContent();
gzin = new GZIPInputStream(is);
//InputStreamReader isr = new InputStreamReader(gzin, "utf8");
//java.io.BufferedReader br = new java.io.BufferedReader(isr);
StringBuffer sb = new StringBuffer();
try {
byte[] by= new byte[1024];
int actlength=0;
while((actlength=gzin.read(by))!=-1){
byte[] b=Arrays.copyOf(by, actlength);;
String s= new String(b,"utf8");
System.out.println(s);
sb.append(s);
}
//
// StringBuffer sb = new StringBuffer();
// String tempbf;
// while ((tempbf = br.readLine()) != null) {
// sb.append(tempbf);
// sb.append("\r\n");
// }
}
catch (java.io.EOFException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
// isr.close();
// gzin.close();
return sb.toString();
// return "";
//For deflate response
}
3 楼
javajava22
2011-11-02
zhoulei984623 写道
javajava22 写道
截取部分代码 ,抛错
java.io.EOFException
at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:207)
at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:197)
at java.util.zip.GZIPInputStream.readUInt(GZIPInputStream.java:189)
at java.util.zip.GZIPInputStream.readTrailer(GZIPInputStream.java:179)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:94)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
java.io.EOFException
at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:207)
at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:197)
at java.util.zip.GZIPInputStream.readUInt(GZIPInputStream.java:189)
at java.util.zip.GZIPInputStream.readTrailer(GZIPInputStream.java:179)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:94)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
你是在linux or windows?
windows , 发现这个和普通的IO 好像 有区别,换成 读取byte 后一样报错,不过捕捉就行了,内容还是没错,不过让人抓狂的是 抓取解压的代码 有时候是中文,有时候部分是乱码,呵呵
2 楼
zhoulei984623
2011-11-01
javajava22 写道
截取部分代码 ,抛错
java.io.EOFException
at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:207)
at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:197)
at java.util.zip.GZIPInputStream.readUInt(GZIPInputStream.java:189)
at java.util.zip.GZIPInputStream.readTrailer(GZIPInputStream.java:179)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:94)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
java.io.EOFException
at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:207)
at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:197)
at java.util.zip.GZIPInputStream.readUInt(GZIPInputStream.java:189)
at java.util.zip.GZIPInputStream.readTrailer(GZIPInputStream.java:179)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:94)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
你是在linux or windows?
1 楼
javajava22
2011-11-01
截取部分代码 ,抛错
java.io.EOFException
at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:207)
at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:197)
at java.util.zip.GZIPInputStream.readUInt(GZIPInputStream.java:189)
at java.util.zip.GZIPInputStream.readTrailer(GZIPInputStream.java:179)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:94)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
java.io.EOFException
at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:207)
at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:197)
at java.util.zip.GZIPInputStream.readUInt(GZIPInputStream.java:189)
at java.util.zip.GZIPInputStream.readTrailer(GZIPInputStream.java:179)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:94)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
发表评论
-
Ofbiz知识点记载
2013-10-04 21:22 1196定义实体Entity的时候查看数据库所支持的数据类型可参 ... -
使用基于JPA注释的实体转换成数据库schema
2013-01-18 10:13 2273第一步:添加hibernate3-maven-plugin到 ... -
java获取中文拼音首字母工具类
2011-08-13 22:11 8651package com.sw.documentary.comm ... -
unicode的html页面编码转换成中文
2011-07-26 10:30 6516代码: private static String con ... -
使用log4j输出日志到rsyslog日志服务器
2010-12-17 15:43 4065好处是可以将不同应用或者同一应用的多个集群服务器的日志发送到同 ... -
java配合eclipse实现远程调试
2010-11-30 09:40 9861,添加监听 在运行程序的地方加上参数 -Xdeb ... -
使用Apache的commons-net包实现FTP操作的类
2010-11-18 14:41 1748import java.io.File; import ... -
一个用于图片处理的工具类
2010-10-29 14:56 1523其中包括图片与字节流的相互转换,获取图片类型,图片大小,图片长 ... -
使用SPRING中的线程池ThreadPoolTaskExecutor实现JAVA并发
2010-09-16 10:24 38973使用SPRING中的线程池ThreadPoolTaskExec ... -
java中hashcode()方法和equals方法【转】
2010-06-26 08:58 954hashcode这个方法是用来鉴定2个对象是否相等的。 那你 ... -
LIST<Object>序列化
2010-03-18 17:26 4319有时候当需要远程传送一个LIST<Object>对 ... -
java穿透内网实现点对点通信的思考
2010-03-18 17:19 61141,客户端A登陆的时候,发送一个UDP数据包给服务器,然后服务 ... -
构建一个易于管理的JPopupMenu
2010-03-18 17:04 11031,构建一个Action public Action bin ... -
PDF屏蔽打印,隐藏工具栏和菜单栏
2008-09-01 15:59 8141刚研究了一下PDF文件现在把研究成果写在下面。 用户的需求都 ... -
一个关于NIO的小程序
2008-08-05 16:31 1463随便看看: import java.io.FileInputS ... -
Java Socket网络编程初级入门
2008-08-04 11:31 267已搬家至www.w2tt.cn -
关于提高自己JAVA水平的十大技术讨论[ZT]
2007-12-24 09:58 1226本文列出了当今计算机 ...
相关推荐
在这个例子中,我们设置了HttpClientHandler的`AutomaticDecompression`属性为`DecompressionMethods.GZip`,这样HttpClient就会自动处理GZip格式的压缩响应。 二、HttpClientHandler和DecompressionMethods枚举 ...
去取解压 解压缩用 gzip 压缩的响应体。安装 npm install --save go-fetch-decompress用法 var HttpClient = require('go-fetch');var decompress = require('go-fetch-decompress');var parseBody = require('go-...
标题 "java抓取网页源码gzip-phproxy" 暗示了我们正在讨论一个使用Java进行Web抓取,并处理GZIP压缩的项目,而“PHP中的代理”则可能指的是使用PHP构建的代理服务器。这个项目可能涉及到如何通过Java从通过PHP代理...
这种格式结合了tar(归档)和gzip(压缩)两种工具,能够有效地减小文件体积,便于在网络上传输和存储。在下载完成后,我们需要先解压这个文件,然后通过Python的setuptools或pip工具进行安装。 解压"EasyConnect-...
3. **使用GZIP压缩进行文本数据传输**: - 使用GZIP压缩可以显著减小传输的数据量,从而降低网络传输消耗的电量。可以通过Java自带的`GZIPInputStream`类来实现数据的解压: ```java ...
5. **处理压缩内容**:如果内容被压缩,比如使用gzip,我们可以使用`System.IO.Compression.GZipStream`来解压。解压后的内容再按照指定的字符集进行解码。 6. **处理编码**:对于非ASCII字符,我们需要使用合适的...
29. `System.IO.Compression.GZipStream` 和 `System.IO.Compression.DeflateStream`:GZIP和Deflate压缩流,用于数据压缩和解压。 30. `System.Net.Sockets.TcpClient` 和 `System.Net.Sockets.TcpListener`:TCP...
8. **性能优化**:减少网络请求次数,合并多个请求为一个(如批量操作),使用缓存策略,以及在可能的情况下使用GZIP压缩以减小数据传输量。 通过阅读"Consume-Webservice-in-Windows-Universal-App.pdf"和解压...