我尝试使用 SQLRPGLE 使用 QSYS2.HTTP_GET 函数调用外部 API,但服务器出现错误请求错误。我使用了一些变量来构建 URL 请求和选项参数。需要知道为什么它给出错误的请求响应,因为我无法找到请求语法错误。
H*
D*-------------------------------------------------------------------------
D*-------------------------------------------------------------------------
DURL1 S 200A
DURL2 S 200A
Duser S 30A
Dpass S 30A
Dsid S 30A
Dsms S 30A
Dmsisdn S 30A
Dcsmsid S 30A
DOPTA1 S 30A
C*-------------------------------------------------------------------------
C
C EVAL OPTA1='{"sslTolerate":"true"}'
C EVAL user='user=metlifeapi'
C EVAL pass='&pass=c=78V022'
C EVAL sid='&sid=metlifeapi'
C EVAL sms='&sms=TESTSMS'
C EVAL msisdn='&msisdn=8801730377486'
C EVAL csmsid='&csmsid=123456789'
C EVAL URL1='http://sms.sslwireless.com'+
C '/pushapi/dynamic/server.php?'+
C %TRIM(%CHAR(user))+
C %TRIM(%CHAR(pass))+
C %TRIM(%CHAR(sid))+
C %TRIM(%CHAR(sms))+
C %TRIM(%CHAR(msisdn))+
C %TRIM(%CHAR(csmsid))
C EVAL URL2=%TRIM(%CHAR(URL1))
C/EXEC SQL
C+ SET OPTION COMMIT=*NONE
C/END-EXEC
C/EXEC SQL
C+ INSERT INTO QGPL/SMSTST
C+ SELECT CAST(QSYS2.HTTP_GET(:URL2,:OPTA1)
C+ AS VARCHAR(2048) CCSID 37)
C+ FROM SYSIBM.SYSDUMMY1
C/END-EXEC
C SETON LR
我期待服务器发出成功 200 响应。需要知道为什么它给出错误的请求响应,因为我无法找到请求语法错误。预先感谢您的建议。
首先,请从您的问题和评论中删除看似实际的用户名和密码。
其次,您应该使用 VARCHAR,而不是使用固定宽度的字符字段。 那么你就不需要%TRIM()。 您也不应该需要 %CHAR() 。
我的头脑中没有发现任何问题。 我建议在 SQL 语句运行之前在调试中运行并检查
URL2
和 OPTA1
的值。
一个可能的问题可能是使用固定宽度字段。 由于 URL2 仍然是固定宽度,因此以下内容不执行任何操作。
URL2=%TRIM(%CHAR(URL1))
我认为 SQL 引擎会忽略多余的空格。 但我不能肯定地说。 我总是使用 VARCHAR。