• 大小: 10KB
    文件类型: .java
    金币: 2
    下载: 1 次
    发布日期: 2021-11-28
  • 语言: Java
  • 标签: java  http  

资源简介

一个对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

评论

共有 条评论