java http post json

    import java.io.IOException; 
    import java.io.InputStream; 
    import java.io.OutputStreamWriter; 
    import java.net.HttpURLConnection; 
    import java.net.URL; 
     
    public class Copy_2_of_PostDemo { 
     
        final static String url = ""; 
        final static String params = "{\"id\":\"12345\"}"; 
     
        /**
         * 发送HttpPost请求
         * 
         * @param strURL
         *            服务地址
         * @param params
         *            json字符串,例如: "{ \"id\":\"12345\" }" ;其中属性名必须带双引号<br/>
         * @return 成功:返回json字符串<br/>
         */ 
        public static String post(String strURL, String params) { 
            System.out.println(strURL); 
            System.out.println(params); 
            try { 
                URL url = new URL(strURL);// 创建连接 
                HttpURLConnection connection = (HttpURLConnection) url 
                        .openConnection(); 
                connection.setDoOutput(true); 
                connection.setDoInput(true); 
                connection.setUseCaches(false); 
                connection.setInstanceFollowRedirects(true); 
                connection.setRequestMethod("POST"); // 设置请求方式 
                connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式 
                connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式 
                connection.connect(); 
                OutputStreamWriter out = new OutputStreamWriter( 
                        connection.getOutputStream(), "UTF-8"); // utf-8编码 
                out.append(params); 
                out.flush(); 
                out.close(); 
                // 读取响应 
                int length = (int) connection.getContentLength();// 获取长度 
                InputStream is = connection.getInputStream(); 
                if (length != -1) { 
                    byte[] data = new byte[length]; 
                    byte[] temp = new byte[512]; 
                    int readLen = 0; 
                    int destPos = 0; 
                    while ((readLen = is.read(temp)) > 0) { 
                        System.arraycopy(temp, 0, data, destPos, readLen); 
                        destPos += readLen; 
                    } 
                    String result = new String(data, "UTF-8"); // utf-8编码 
                    System.out.println(result); 
                    return result; 
                } 
            } catch (IOException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
            return "error"; // 自定义错误信息 
        } 
     
        public static void main(String[] args) { 
            post(url, params); 
        } 
     
    } 




备注

httpUrlConnection.setDoOutput(true);以后就可以使用conn.getOutputStream().write()
httpUrlConnection.setDoInput(true);以后就可以使用conn.getInputStream().read();

get请求用不到conn.getOutputStream(),因为参数直接追加在地址后面,因此默认是false。
post请求(比如:文件上传)需要往服务区传输大量的数据,这些数据是放在http的body里面的,因此需要在建立连接以后,往服务端写数据。

因为总是使用conn.getInputStream()获取服务端的响应,因此默认值是true。java http post json

你可能感兴趣的:(json)