socket 模拟 http 请求

在csdn里答复一个网友的实例代码

一下代码是通过socket请求一个HTTP服务的过程,通过模拟请求一个web的登录操作,然后处理服务器返回的消息。这里只是简单的打印出服务器返回的消息,可以根据需要解析相应的数据,根据数据状态处理你的业务逻辑。只是简单的实现你的要求,没有考虑程序的健壮性,如关闭流应该放在finally里面等。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * SocketHttpTest.java V1.0 2012-4-12 上午10:33:07
 * 
 * Copyright 2011 **** Technologies. All rights reserved.
 * 
 * Modification history(By Time Reason):
 * 
 * Description:
 */
public class SocketHttpTest {
    
    /**
     * 
     * <pre><b>功能描述:</b>程序入口
     * 
     * @author :****(Kevin.xie)
     * <b>创建日期 :</b>2012-4-12 上午10:33:10
     *
     * @param args
     *
     * <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
     *
     * </pre>
     */
    public static void main(String args[]) {

        try {
            
            // Post请求格式如下:
            String postParams = "userName=kevin.xie&pwd=demo8888";
            int paramsLen = postParams.length();
            
            // 请求的参数
            StringBuffer post = new StringBuffer(512);
            // web的请求登录路径:demo为项目名称,user/login.do为登录的action
            post.append("POST /demo/user/login.do HTTP/1.1\r\n");
            // tomcat服务器及端口
            post.append("Host: 127.0.0.1:8080\r\n");
            post.append("Accept: text/html\r\n");
            post.append("Connection: Close\r\n");
            post.append("Content-Length: " + paramsLen + "\r\n");
            post.append("Content-Type: application/x-www-form-urlencoded\r\n");// *
            post.append("\r\n");
            // 请求的参数
            post.append(postParams);
            
            // socket客户端连接本机的tomcat服务器,端口为8080
            Socket socket = new Socket("127.0.0.1", 8080);
            
            // socket客户端发送登录请求
            PrintWriter outWriter = new PrintWriter(socket.getOutputStream());
            // 发送post请求
            outWriter.println(post);
            outWriter.flush();
            
            // socket客户端接收tomcat返回的数据
            BufferedReader inReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
            // 一下是服务器返回的数据--本机demo返回的是json更是的数据
            System.out.println("**************** Server responsed ****************");
            String tmp = "";
            while ((tmp = inReader.readLine()) != null) {
                
                // 解析服务器返回的数据,做相应的处理
                System.out.println(tmp);
            }
            
            outWriter.close();
            inReader.close();
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }
}


以下是tomcat服务器返回的数据
Server: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=9F51D84CDDB13004291EC883FD77A65E; Path=/demo/; HttpOnly Content-Type: application/json;charset=UTF-8 Content-Language: zh-CN Content-Length: 108 Date: Thu, 12 Apr 2012 03:14:05 GMT Connection: close {"struts.token":"FOZAQPTQPOIECS6H605BQ5Q0Z8MJ875O_1334200445717","AjaxResult":"0","values":{"errMsg":""}} 



猜你喜欢

转载自xieyanhua.iteye.com/blog/1484228