一下代码是通过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":""}}