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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。