Java通过http post交互数据

来源:互联网 发布:99家居软件 编辑:程序博客网 时间:2024/06/05 07:00

服务端进行数据交互的时候,通常会通过代码进行http跨系统请求,通常使用post或get方式。在post方式的时候,我们可以使用HttpClient也可以自己实现方法:

public static String sendPost(String url, String param) {    PrintWriter out = null;    BufferedReader in = null;    String result = "";    try {        URL realUrl = new URL(url);        URLConnection conn = realUrl.openConnection();        conn.setRequestProperty("accept", "*/*");        conn.setRequestProperty("connection", "Keep-Alive");        conn.setRequestProperty("user-agent",                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");        conn.setRequestProperty("content-type", "text/html");        // 发送POST请求必须设置如下两行        conn.setDoOutput(true);        conn.setDoInput(true);        out = new PrintWriter(conn.getOutputStream());        out.print(param);        out.flush();        // 定义BufferedReader输入流来读取URL的响应        in = new BufferedReader(new InputStreamReader(conn.getInputStream()));        String line;        while ((line = in.readLine()) != null) {            result += line;        }    } catch (Exception e) {        System.out.println("发送 POST 请求出现异常!"+e);        log.error(e);    } finally{        try{            if(out!=null){                out.close();            }            if(in!=null){                in.close();            }        } catch(IOException ex){            log.error(ex);        }    }    return result;} 

比如我们通过代码传递json数据:

String serviceViewTime = HttpUtils.sendPost(dcmsUrl + "dcms/audiencerating/queryServiceViewTime.action","{\"areacode\":" + areacode + ", \"wbegintime\":\"" + wbegintime + "\", \"wendtime\":\"" + wendtime +"\"}");log.info("1111serviceViewTime=" + serviceViewTime);

接收端Action,我们可以通过读取request请求体的信息,进而得到数据:

public void queryServiceViewTime() {    PrintWriter out = null;    try {        out = response.getWriter();        StringBuffer sb = new StringBuffer();        InputStream is = request.getInputStream();        InputStreamReader isr = new InputStreamReader(is);        BufferedReader br = new BufferedReader(isr);        String str = "";        while ((str = br.readLine()) != null) {            sb.append(str);        }        MinParam param = new MinParam();        if(StringUtils.isNotEmpty(sb.toString())) {            MinParam param1 = JsonUtil.toObjectByJson(sb.toString(), MinParam.class);            if(null != param1) {                param = param1;            }        } else {            out.print("");            return;        }        List<ServiceViewBean> list = audienceRatingService.getOneDayServiceWatchTime(param.getAreacode() == null ? null: param.getAreacode()+"", param.getWbegintime(),                param.getWendtime());        out.print(JsonUtil.toJsonString(list));    } catch (Exception e) {        out.print("");        log.error(e);    }}

也就是从流中读取数据,并转化成我们需要的对象即可。

0 0