在RPGLE中使用QSYS2.HTTP_GET并从服务器收到错误请求(400)错误

问题描述 投票:0回答:1

我尝试使用 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 响应。需要知道为什么它给出错误的请求响应,因为我无法找到请求语法错误。预先感谢您的建议。

http-get rpgle
1个回答
0
投票

首先,请从您的问题和评论中删除看似实际的用户名和密码。

其次,您应该使用 VARCHAR,而不是使用固定宽度的字符字段。 那么你就不需要%TRIM()。 您也不应该需要 %CHAR() 。

我的头脑中没有发现任何问题。 我建议在 SQL 语句运行之前在调试中运行并检查

URL2
OPTA1
的值。

一个可能的问题可能是使用固定宽度字段。 由于 URL2 仍然是固定宽度,因此以下内容不执行任何操作。

URL2=%TRIM(%CHAR(URL1))

我认为 SQL 引擎会忽略多余的空格。 但我不能肯定地说。 我总是使用 VARCHAR。

© www.soinside.com 2019 - 2024. All rights reserved.