资源简介
一个对chunked编码进行解码的例子,通过java socket实现发送http请求,对gzip压缩的消息体进行解码处理。
代码片段和文件信息
package test;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.GZIPInputStream;
public class TransferEncoding {
private static String encoding = “UTF-8“;
public static void main(String[] args) {
try {
Socket socket = new Socket(InetAddress.getByName(“www.iteye.com“) 80);
socket.setSoTimeout(10000); // 10秒钟超时。
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
StringBuffer sb = new StringBuffer();
sb.append(“GET / HTTP/1.1\r\n“);
sb.append(“Accept: image/png image/svg+xml image/*;q=0.8 */*;q=0.5\r\n“);
sb.append(“X-HttpWatch-RID: 18613-10702\r\n“);
sb.append(“Referer: http://www.cnblogs.com/haitao-fan/archive/2013/01/18/2866994.html\r\n“);
sb.append(“Accept-Language: zh-CN\r\n“);
sb.append(“User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko\r\n“);
sb.append(“Accept-Encoding: gzip deflate\r\n“);
sb.append(“Host: www.iteye.com\r\n“);
sb.append(“Connection: Keep-Alive\r\n“);
sb.append(“DNT: 1\r\n“);
//注,这是关键的关键,忘了这里让我搞了半个小时。这里一定要一个回车换行,表示消息头完,不然服务器会等待
sb.append(“\r\n“);
osw.write(sb.toString());
osw.flush();
//--输出服务器传回的消息的头信息
InputStream is = socket.getInputStream();
boolean isGzip = false;
// 读取所有服务器发送过来的请求参数头部信息
String header = readHeader(is);
System.out.println(header);
// 返回的数据类型,是否是gzip压缩的格式
String acceptEncoding = getHeaderValue(header “Content-Encoding“);
if (acceptEncoding.startsWith(“gzip“)) {
isGzip = true;
}
String sContLength = getHeaderValue(header “Content-Length“);
int coentLength = isBlank(sContLength) ? 0 : Integer.parseInt(sContLength);
String body;
if (isGzip) {
body = readGzipBodyToString(is);
} else {
body = readBody(is coentLength);
}
//--输消息的体
System.out.print(body);
//关闭流
is.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读取压缩的消息体,并且转换为字符串
*
* @par
- 上一篇:jsp+servlet+Ajax 购物车
- 下一篇:android p2p 语音对话
相关资源
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
- Java 文件加密传输
- java做的房产管理系统
- 基于jsp的bbs论坛 非常详细
- [免费]java实现有障碍物的贪吃蛇游戏
- java Servlet投票实例
- 操作系统作业 (pv,作业管理,等5个
- 基于C/S架构考试系统(Java)
- java access 仓库管理系统 源码
- 一元多项式相加 java实现
评论
共有 条评论