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

PLSQL通过utl_http调用REST API返回ORA-29273错误如何解决

错误原因

ORA-29259 end-of-input reached 配合HTTPS请求出现,绝大多数情况都是HTTPS TLS握手失败导致的,你调用的接口是HTTPS协议,UTL_HTTP默认不直接支持HTTPS,需要额外配置两个核心依赖:

  1. Oracle钱包,存储目标站点的根CA证书
  2. 给当前数据库用户开通UTL_HTTP访问目标站点的ACL权限

解决步骤

1. 配置Oracle钱包

首先导出api.wheretheiss.at站点的根CA证书(PEM格式),然后在数据库服务器上用orapki工具创建钱包并导入证书:

# 创建钱包,按提示输入钱包密码,-auto_login表示无需密码可自动读取钱包
orapki wallet create -wallet /数据库服务器上的钱包存储目录 -pwd 你的钱包密码 -auto_login
# 导入下载好的站点根CA证书
orapki wallet add -wallet /数据库服务器上的钱包存储目录 -pwd 你的钱包密码 -trusted_cert -cert /根证书存储路径/root_ca.cer

注意:确保Oracle运行用户对钱包存储目录有读权限

2. 配置ACL网络访问权限

用SYS用户执行以下命令,给你的业务数据库用户开通访问目标站点443端口的权限:

BEGIN
  DBMS_NETWORK_ACL_ADMIN.append_host_ace (
    host       => 'api.wheretheiss.at', 
    lower_port => 443,
    upper_port => 443,
    ace        => xs$ace_type(privilege_list => xs$name_list('connect'),
                              principal_name => '你的业务数据库用户名',
                              principal_type => xs_acl.ptype_db)); 
END;
/

3. 修正PLSQL代码

在原有代码基础上增加钱包配置、标准请求头设置,完整代码如下:

declare
l_url            varchar2(32767) := 'https://api.wheretheiss.at/v1/satellites/25544';
l_http_request   utl_http.req;
l_http_response  utl_http.resp;
l_text           varchar2(32767);
begin
  -- 新增:配置钱包,路径前缀必须加file:,auto_login钱包密码可填空字符串
  utl_http.set_wallet('file:/数据库服务器上的钱包存储目录', '');
  l_http_request := utl_http.begin_request(l_url);
  -- 新增:明确请求方法、接受的返回类型,避免服务端拦截
  utl_http.set_method(l_http_request, 'GET');
  utl_http.set_header(l_http_request, 'Accept', 'application/json');

  l_http_response := utl_http.get_response(l_http_request);
  -- 可选:打印响应状态码方便排查问题
  dbms_output.put_line('响应状态码:'||l_http_response.status_code);

  begin
    loop
      utl_http.read_text(l_http_response, l_text, 32766);
      dbms_output.put_line(l_text);
    end loop;
  exception
    when utl_http.end_of_body then
      utl_http.end_response(l_http_response);
  end;
exception
  when others then
    utl_http.end_response(l_http_response);
    raise;
end;
/

前置排查

如果配置完成仍报错,可以先在数据库服务器上执行curl命令验证网络连通性,确认没有防火墙、代理拦截:

curl https://api.wheretheiss.at/v1/satellites/25544

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:06:02