使用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();
    }函数

相关文章
相关标签/搜索