天天看點

HTTP用戶端+服務端小工具

為解決項目中,需要進行的封包對比測試工作,寫了一個小的比對工具,做以下記錄,友善以後查閱學習,涉及到了http用戶端和服務端的建構

HTTP用戶端+服務端小工具

用戶端核心代碼:(webservice)

public static String webServiceRequest(String url, String sysParam,
            String busiParam) throws Exception {
        /** 建立用戶端 **/
        WsAccessStub stub = new WsAccessStub(url);
        org.apache.axis2.client.Options o = stub._getServiceClient().getOptions();
        o.setTimeOutInMilliSeconds();

        /** 調用服務 **/
        WsAccessStub.Service service = new WsAccessStub.Service();
        service.setSysParam(sysParam);
        service.setBusiParam(busiParam);
        System.out.println("服務調用中...\n");
        WsAccessStub.ServiceResponse rsp = stub.service(service);
        String secBusiParams = rsp.get_return();

        // 傳回結果解密,測試環境暫時不需要
        return secBusiParams;
    }
           

服務端核心代碼:(http,socket實作)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import java.net.*;
import java.util.HashMap;
import java.util.Map;

import com.asiainfo.simulationTest.respserver.util.SRVUtil;

public class HTTPServer {
    private static final int port = ;
    private ServerSocket serverSocket = null;

    public HTTPServer() throws IOException {
        serverSocket = new ServerSocket(port);
        System.out.println("HTTPServer startup OK...");
    }

    public String getRequest(Socket socket) throws IOException {
        InputStream socketIn = socket.getInputStream();
        int size = socketIn.available();
        byte[] requestBuff = new byte[size];
        socketIn.read(requestBuff);
        String rtnstr = new String(requestBuff,"utf-8");

        return rtnstr;
    }

    /**
     * 解析出URL
     */
    public String getURI(String request) {
        String firstLine = request.substring(, request.indexOf("\r\n"));
        String[] parts = firstLine.split(" ");

        return parts[];
    }

    /**
     * 解析出業務參數
     */
    public String getIndata(String request) {
        String[] parts = request.split("\r\n");

        return parts[];
    }

    public String getContentType(String URI) {
        /* 決定HTTP響應正文的類型 */
        String contentType;
        if (URI.indexOf("html") != - || URI.indexOf("htm") != -)
            contentType = "text/html";
        else if (URI.indexOf("jpg") != - || URI.indexOf("jpeg") != -)
            contentType = "image/jpeg";
        else if (URI.indexOf("gif") != -)
            contentType = "image/gif";
        else
            contentType = "application/json; charset=UTF-8";
        return contentType;
    }

    public InputStream getResponseContent(String URI)
            throws FileNotFoundException {
        InputStream htmlInputStream = new FileInputStream(
                System.getProperty("user.dir") + "/WebRoot" + URI);
        return htmlInputStream;
    }

    public String getResp(String contentType,String sourceId,String flowCode,String inData) {
        /* 建立HTTP響應結果 */
        // HTTP響應的第一行
        reponseHandler rep = new reponseHandler();

        String responseFirstLine = "HTTP/1.1 200 OK\r\n";
        // HTTP響應頭
        String responseHeader = "Content-Type:" + contentType + "\r\n\r\n";
        // HTTP響應出參
        String outparam = new String();
        try {
            outparam = rep.getRespParam(sourceId,flowCode,inData);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return responseFirstLine + responseHeader+ outparam;
    }


    public void service() throws InterruptedException {
        while (true) {
            Socket socket;
            Map inParam = new HashMap();
            try {
                socket = serverSocket.accept();

                String request = getRequest(socket);
                System.out.println("HttpServer receive request:\n" + request);

                String URI = getURI(request);
                String inData = getIndata(request);
                inParam = SRVUtil.URLRequest(URI);
                String flowCode = inParam.get("BUSICODE").toString();
                String sourceId = inParam.get("SOURCEID").toString();
                String contentType = getContentType(URI);

                OutputStreamWriter outsw = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
                BufferedWriter out = new BufferedWriter(outsw);
                String reponseParam = getResp(contentType,sourceId,flowCode,inData);
                out.write(reponseParam);
                out.flush();
                outsw.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    public static void main(String[] args) throws IOException,
            InterruptedException {
        HTTPServer httpServer = new HTTPServer();
        httpServer.service();
    }
}
           

繼續閱讀