使用HttpURLConnection向服務器發送post請求

發送 post 請求:java

客戶端實例:web

/**
     * 發送 post請求 - httpUrlConnection
     * @param args
     */
    public static void main(String[] args) {
        String encoding="UTF-8";
        String params="[{\"addTime\":\"2011-09-19 14:23:02\",\"iccid\":\"1111\",\"id\":0,\"imei\":\"2222\",\"imsi\":\"3333\",\"phoneType\":\"4444\",\"remark\":\"aaaa\",\"tel\":\"5555\"}]";
        String path ="http://localhost:8080/web1/servletPostCallBack.hts";
        String result = ""; // 響應結果
        
        try{
             byte[] data = params.getBytes(encoding);
             URL url = new URL(path);
             HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            
             conn.setRequestMethod("POST");
             // http正文內,所以須要設爲true, 默認狀況下是false;
             conn.setDoOutput(true);
             // 設置是否從httpUrlConnection讀入,默認狀況下是true;   
             conn.setDoInput(true);   
             
             // 設定傳送的內容類型是可序列化的java對象  
             conn.setRequestProperty("Content-type", "application/json"); 
             conn.setRequestProperty("Content-Length", String.valueOf(data.length));json

            conn.setConnectTimeout(5*1000); // 設置鏈接服務器超時時間
            conn.setReadTimeout(5*1000);    // 設置從主機讀取數據超時(單位:毫秒)
             conn.connect(); // 自此設置完 消息頭
             
             //在http頭後面緊跟着的是http請求的正文,正文的內容是經過outputStream流寫入的
             OutputStream outStream = conn.getOutputStream(); // 如今經過輸出流對象構建對象輸出流對象,以實現輸出可序列化的對象。
             outStream.write(data); // 向對象輸出流寫出數據,這些數據將存到內存緩衝區中 
             outStream.flush();  // 刷新對象輸出流,將任何字節都寫入潛在的流中
             outStream.close();  // 關閉流對象。此時,不能再向對象輸出流寫入任何數據,先前寫入的數據存在於內存緩衝區中,   
             // 在調用下邊的 getInputStream()函數時才把準備好的 http 請求正式發送到服務器
             
             System.out.println(conn.getResponseCode()); //響應代碼 200表示成功
             if(conn.getResponseCode()==200){
                 InputStream inStream = conn.getInputStream(); // <===注意,實際發送請求的代碼段就在這裏     
                 BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "utf-8"));
                 String line = "";
                 while((line = reader.readLine()) != null){
                     result += line;
                 }
             }
             System.out.println("post請求後響應的結果爲:" + result);
        }catch(Exception e){
            e.printStackTrace();
        }
    }服務器

服務器端實例:app

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        InputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader bufferedReader = null;
        String strReq = null;
        PrintWriter out = null;
        
        inputStream = request.getInputStream();
        inputStreamReader = new InputStreamReader(inputStream,"utf-8");
        bufferedReader = new BufferedReader(inputStreamReader);
        StringBuffer result = new StringBuffer();
        String line = null;
        while((line = bufferedReader.readLine()) != null){
            result.append(line);
        }
        //請求json報文
        strReq = result.toString();
        System.out.println("post請求的報文爲:" + strReq);
        
        response.setCharacterEncoding("UTF-8");
        out = response.getWriter();
        out.print("接受成功--this is ok!");
        out.close();
    }函數

相關文章
相關標籤/搜索