AcuCobol 外部调用

AcuCobol external call

我正在尝试将我公司旧系统的一些功能集成到我们的新系统中。

我们在 ACUCOBOL v6.2 上有一些 COBOL 代码 运行。是否有一种简单的方法可以在不购买 AcuToWeb 或其他软件包的情况下进行外部 http 调用/甚至非 http 调用。

我可以想出几种方法来处理这个问题:

  1. 通过打开文件名以“-P”开头的 "file" 来调用外部(非 Cobol)程序。这使得 acucobol 为程序创建了一个管道。您可以读取或写入外部程序,但不能同时读取和写入。对于对话的另一方,我通常使用命令行参数或常规文件,但您不能轻松地同时打开两者。例如,打开 -Pcurl https://www.google.com/?q=acucobol 作为输入,或 -Pps2pdf > /tmp/pdf-file 作为输出并发送一些后记。
  2. 通过CALL "SYSTEM" USING COMMAND-LINE
  3. 调用外部程序
  4. 创建一个与外部系统接口的 C 子例程,并使用 AcuCOBOL 的方法与 C 程序链接。

您可以使用 C$SOCKET 在端口 80 上建立到服务器的套接字连接。
然后你可以发送一个http请求,然后阅读答案。

78  NL          value X"0A".

...

call "C$SOCKET" using AGS-CREATE-CLIENT,
        port, host giving socket-handle

...

move spaces     to zw-get
move 1      to zw-length
string "GET "               delimited by size
        "YourPath"          delimited by size
        " HTTP/1.1"         delimited by size
        NL                  delimited by size
        "HOST: "            delimited by size
        "YourHost"          delimited by size
        NL                  delimited by size
        NL                  delimited by size
    into zw-get
    with pointer zw-length
end-string
subtract 1      from zw-length 

call "C$SOCKET" using AGS-WRITE,
        socket-handle, zw-get, zw-length

...

initialize zw-length zw-answer
call "C$SOCKET" using AGS-READ,
    socket-handle, zw-answer, zw-length, READ-TIMEOUT

运行时内置了一个名为 "rmnet" 的实用程序,可与选项一起使用以使用 http 调用网络服务器。

RMNet 应用程序编程接口 (API) 模拟从网站提取信息或使用 SOAP 与 Web 服务交互的浏览器。

RMNet 在 Web 客户端(通常是 ACUCOBOL_GT 扩展程序)和 Web 服务器之间移动数据。通用资源定位符 (URL) 描述资源。资源决定了数据格式。例如,如果向浏览器使用的 Web 表单提交数据,则数据的格式必须符合 application/x-www-form-urlencoded 的 W3C 规范。与 SOAP Web 服务交互时,会交换 XML 个文档。

samples下的runtime文件夹里有samples看看rmnet文件夹