使用SQLRPGLE中QSYS2.HTTP_GET调用API返回400错误求助
SQLRPGLE调用QSYS2.HTTP_GET返回400 Bad Request错误排查
我在SQLRPGLE中使用QSYS2.HTTP_GET调用外部API时,服务器返回400(Bad Request)错误。通过变量拼接请求URL和参数选项,检查后未发现明显语法问题,但始终无法得到200成功响应,希望排查错误原因。
代码示例
H* D*------------------------------------------------------------------------- D*------------------------------------------------------------------------- DURL1 S 200A DURL2 S 200A Dxxxx S 30A Dxzzz S 30A Daaa S 30A Dbbb S 30A Dbbbsdn S 30A Dbbbid S 30A DOPTA1 S 30A C*------------------------------------------------------------------------- C C EVAL OPTA1='{"sslTolerate":"true"}' C EVAL xxxx='xxxx=xxxxxx' C EVAL zzzz='&zzzz=c=xxxxx' C EVAL ='&bbb=xxxxxx' C EVAL aaa='&aaa=TESTSMS' C EVAL bbb='&bbbsdn=xxxxxxxx' C EVAL bbbsid='&bbbsid=xxxxxx' C EVAL URL1='http://xyz.xxxx.com'+ C '/xxxxapi/xxxx/sss.com?'+ C %TRIM(%CHAR(xxxx))+ C %TRIM(%CHAR(zzzz))+ C %TRIM(%CHAR(aaa))+ C %TRIM(%CHAR(bbb))+ C %TRIM(%CHAR(bbbsdn))+ C %TRIM(%CHAR(bbbsid)) 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
排查方向
- 变量定义与使用不匹配:代码中定义了变量
xzzz,但赋值时用的是zzzz,会导致该参数未被正确拼接进URL,缺失必要参数触发400错误。 - 无效赋值语句:存在一行
EVAL ='&bbb=xxxxxx',未指定目标变量,这行代码不会生效,对应参数缺失。 - URL长度限制:
URL1定义为200A,拼接后的URL可能超出长度被截断,导致请求格式错误。建议增大URL1的长度(如设置为500A)。 - 参数拼接正确性:检查参数前缀
&的使用,确保第一个参数无&,后续参数正确添加;同时确认所有参数都被正确赋值并拼接。 - OPTA1变量容量:
OPTA1定义为30A,当前配置字符串长度虽未超限,但如果后续扩展选项可能不够,建议适当增大容量。 - URL编码问题:若参数值包含特殊字符(如空格、中文等),需手动进行URL编码,QSYS2.HTTP_GET不会自动处理特殊字符编码,未编码会导致请求格式错误。
内容的提问来源于stack exchange,提问作者khairul anam
相关产品推荐
相关产品推荐

