我正在尝试将我公司旧系统中的一些功能集成到我们的新系统中。
我们有一些 COBOL 代码运行在 ACUCOBOL v6.2 上。有没有一种简单的方法可以在不购买AcuToWeb或其他软件包的情况下进行外部http调用/甚至非http调用。
我可以想到几种方法来解决这个问题:
- 通过打开文件名以"-P"开头的"文件"来调用外部(非 cobol(程序。 这使得 acucobol 创建了通往程序的管道。 您可以读取或写入外部程序,但不能同时读取或写入两者。 我通常使用命令行参数或常规文件来表示对话的另一端,但您不能轻易同时打开两者。 例如,打开
-Pcurl https://www.google.com/?q=acucobol
输入,或-Pps2pdf > /tmp/pdf-file
作为输出,并向其发送一些后记。 - 通过
CALL "SYSTEM" USING COMMAND-LINE
调用外部程序 - 创建一个将与外部系统接口的 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 调用 Web 服务器的选项一起使用。
请参阅 RMNet 例程的文档。
RMNet 应用程序编程接口 (API(,用于模拟从网站提取信息或使用 SOAP 与 Web 服务交互的浏览器。
RMNet 在 Web 客户端(通常是ACUCOBOL_GT扩展程序(和 Web 服务器之间移动数据。通用资源定位器 (URL( 用于描述资源。资源指示数据格式。例如,如果将数据提交到浏览器使用的 Web 表单,则必须对数据进行格式化以符合 application/x-www-form-urlencoded 的 W3C 规范。与 SOAP Web 服务交互时,将交换 XML 文档。
运行时文件夹中有示例,在示例下查找 rmnet 文件夹。