资源简介
一个对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 语音对话
相关资源
- mysql数据处理,java用户登录处理
- 法律咨询信息系统(java+jsp+sqlserver)
- Java快速开发平台源码(renren-fast)
- 锐聘学院QST青软JavaWeb十二个打包
- 3.3.6微信支付JAVA版demo
- javaweb网上购物系统源码(附数据库脚
- javaweb校园宿舍系统(附数据库脚本)
- JavaWeb书城项目(附数据库脚本)
- 基于JAVA_JSP电子书系统(源码+数据库
- Java网络编程知识点总结.xmind
- 一站式Java网络编程 BIO-NIO-AIO资料源码
- jsp讲解
- 基于SSH框架的JavaWeb项目—人员信息管
- javaweb实现的邮件收发系统(附数据库
- Java 仿QQ(附客户端以及服务端源码)
- Java TCP IP Socket
- java定时发送邮件(基于quartz)
- Java Swing开发的《星际争霸》游戏
- java+数据库商品交易管理系统(附数据
- 使用java语言编译一个计算器
- java swing工资管理系统(源码+数据库
- JAVALibrary
- 微信企业号回调模式Java版
- 顺丰丰桥接口开发详细教程源码含下
- Java博客概要设计文档
- 药品进销存管理系统(论文范文_JSP
- 奖学金管理系统java+jsp+mysql
- 毕设参考——基于java酒店管理
- Java写的一个简单的字体更改程序
- java8学习教程之lambda表达式的使用方法
评论
共有 条评论