You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用apex_web_service.make_rest_request发送HTTPS POST请求并解决参数报错

解决APEX 18.1中apex_web_service.make_rest_request参数错误问题

你当前的问题是:用utl_http.request能成功调用HTTPS接口,但使用APEX 18.1的apex_web_service.make_rest_request带POST请求、基本认证和钱包参数时,触发ORA-06553: PLS-306参数错误。

问题原因

APEX 18.1版本的apex_web_service.make_rest_request函数不支持直接传入p_username和p_password参数,这两个参数是在更高版本的APEX中才新增的。你当前的调用因为传入了不存在的参数,导致参数数量/类型不匹配报错。

解决方案

方案1:手动构造Basic Auth请求头

直接生成符合HTTP Basic认证规范的请求头,传入函数的p_headers参数:

SELECT apex_web_service.make_rest_request(
    p_url            => 'https://aa.xxxxxxx.com:port/dev/api/v1/asd',
    p_http_method    => 'POST',
    p_wallet_path    => 'file:/u01/wallet',
    p_wallet_password=> 'WalletPass',
    p_body           => '',
    p_headers        => apex_util.string_to_table('Authorization: Basic ' || utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('asdasd:asdadsasd'))))
) FROM DUAL;

注意:这里用utl_raw.cast_to_varchar2转换Base64编码结果,避免返回RAW类型导致的格式问题。

方案2:使用APEX静态凭据(推荐)

通过APEX工作区的凭据管理功能存储账号密码,避免硬编码:

  1. 进入APEX工作区,导航到应用程序构建器 → 共享组件 → 凭据 → 创建静态凭据,填入用户名asdasd、密码asdadsasd,记录生成的静态ID。
  2. 调用函数时传入凭据静态ID:
SELECT apex_web_service.make_rest_request(
    p_url                  => 'https://aa.xxxxxxx.com:port/dev/api/v1/asd',
    p_http_method          => 'POST',
    p_wallet_path          => 'file:/u01/wallet',
    p_wallet_password      => 'WalletPass',
    p_body                 => '',
    p_credential_static_id => '你的静态凭据ID'
) FROM DUAL;

额外说明

  • 确保p_wallet_path和p_wallet_password与你之前utl_http.request使用的完全一致,保证SSL连接正常。
  • 如果需要发送JSON格式的请求体,需添加Content-Type: application/json到请求头中,示例:
    p_headers => apex_util.string_to_table('Authorization: Basic xxxxxxxx'||chr(10)||'Content-Type: application/json')
    

内容的提问来源于stack exchange,提问作者Samuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:05:16