xiaolihuidao 2015-07-19 13:36 采纳率: 0%
浏览 2362

Java web 调用cgi发送form表达数据,如何获取返回值?

各位,大家好,有个问题想请教一下,目前一套java web开发的网站,需要调用外公司
提供的一个cgi接口,用于实现发送一个字符串(包含了几个字段的数据)给他们的cgi
脚本,我们发送不论成功或者失败,他们都会返回一个具体的int值给我们,我该如何发
送并获取返回值?网上看到的资料不是特别多,自己大概的思路如下:

//jsp要调用的程序为AgentRetMaintainerAct.cgi
URL u = new URL("http://www.****.com.cn/***/cgi-bin/AgentRetMaintainerAct.cgi");

//urlc表示 URL 的连接对象
URLConnection urlc = u.openConnection();

//指示应用程序要从 URL 连接读取数据
        urlc.setDoOutput(true);
        urlc.setDoInput(true);

//允许用户交互。
        urlc.setAllowUserInteraction(true);

//输出流getoutputstream,用于向socket端发送数据,就是发送消息用的                      
        DataOutputStream server = new DataOutputStream(urlc.getOutputStream());     

        //调用cgi通过http的post方式发送字符串到cgi
        server.writeBytes(totol);
        server.close();

        但是现在我不知道这样处理是否正确,也不明确如何获取对方的返回值?

        烦请高手帮忙看看,该如何处理。语句要如何实现?非常感谢!!!
  • 写回答

1条回答

  • yuke198907 2015-07-20 02:04
    关注
     String rec_string = "";//返回值
     String address ="";//URL地址
     String commString = "";//参数字符串
            URL url = null;
            HttpURLConnection urlConn = null;
            try {
                /* 得到url地址的URL类 */
                url = new URL(address);
                /* 获得打开需要发送的url连接 */
                urlConn = (HttpURLConnection) url.openConnection();
                /* 设置连接超时时间 */
                urlConn.setConnectTimeout(30000);
                /* 设置读取响应超时时间 */
                urlConn.setReadTimeout(30000);
                /* 设置post发送方式 */
                urlConn.setRequestMethod("POST");
                /* 发送commString */
                urlConn.setDoOutput(true);
                urlConn.setDoInput(true);
                OutputStream out = urlConn.getOutputStream();
                out.write(commString.getBytes());
                out.flush();
                out.close();
                /* 发送完毕 获取返回流,解析流数据 */
                BufferedReader rd = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "UTF-8"));
                StringBuffer sb = new StringBuffer();
                int ch;
                while ((ch = rd.read()) > -1) {
                    sb.append((char) ch);
                }
                rec_string = sb.toString().trim();
                /* 解析完毕关闭输入流 */
                rd.close();
            } catch (Exception e) {
                /* 异常处理 */
                rec_string = "-107";
                System.out.println(e);
            } finally {
                if (urlConn != null) {
                    /* 关闭URL连接 */
                    urlConn.disconnect();
                }
            }
            /* 返回响应内容 */
            return rec_string;
    
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?