【问题标题】:Oracle Error ORA-29273: HTTP request failed ORA-29259: end-of-input reached When Calling UTL_HTTP.requestOracle 错误 ORA-29273:HTTP 请求失败 ORA-29259:调用 UTL_HTTP.request 时达到输入结束
【发布时间】:2019-05-29 21:12:00
【问题描述】:

我正在尝试使用 Oracle UTL_HTTP.request API 调用 Web 服务。通话需要代理和钱包/证书。我相信我已经解决了证书问题,因为我不再收到 ORA-29024: Certificate validation failure 错误。现在我收到ORA-29259: end-of-input reached 错误。我使用的是 DBMS 版本 12.1.0.2.0,应该使用 TLS 1.2(不确定如何验证)。

以下调用完美运行并返回 JSON 有效负载:

SELECT utl_http.request (
  'http://jsonplaceholder.typicode.com/todos/1',
  'proxy.myurl.com')
FROM dual;

回复:

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

以下调用引发 ORA-29259 错误:

SELECT utl_http.request (
  'https://service.baseurl.com/ping',
  'proxy.myurl.com',
  'file:/my/wallet/location',
  'mypassword'
 )
FROM DUAL;

运行时异常堆栈:

ORA-29273: HTTP request failed
ORA-29259: end-of-input reached
ORA-06512: at "SYS.UTL_HTTP", line 1491
ORA-06512: at line 1

我也尝试过使用匿名 PL/SQL 块调用 UTL_HTTP.begin_request,但得到与上述基本相同的 ORA-29259 错误。

DECLARE
  l_http_request utl_http.req;
  l_http_response utl_http.resp;
  l_text VARCHAR2(32767);
BEGIN
  utl_http.set_proxy('proxy.myurl.com');
  utl_http.set_wallet('file:/my/wallet/location'
                      ,'mypassword');
  l_http_request := utl_http.begin_request('https://service.baseurl.com/ping' 
                                           ,'POST', 'HTTP/1.1');
  l_http_response := utl_http.get_response(l_http_request);
  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;
END;

ORA-29273: HTTP request failed
ORA-29259: end-of-input reached
ORA-06512: at "SYS.UTL_HTTP", line 1258
ORA-06512: at line 10

关于可能导致此错误的任何想法?

【问题讨论】:

  • 您是否为钱包配置了ACL?见MoS document ID 2303905
  • 我尝试将DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE 代码作为SYSTEM 运行以获取特权'use_client_certificates', 'use_passwords'。它没有错误地完成,但在调用UTL_HTTP.request 时我仍然收到相同的ORA-29259 错误。

标签: oracle api https oracle12c


【解决方案1】:

我认为您的问题是 12.1c 中缺少密码套装。 您必须在您的数据库上应用一个安全补丁 24666032,并且最小 DBBP 应该是 12.1.0.2.160719 (23054246)。

之后,数据库应该添加对密码的支持。

您可以查看有关 MOS:UTL_HTTP 访问受保护网站失败并在 12c 数据库中出现 ORA-29259 的此信息(文档 ID 2402276.1)

问候

【讨论】:

  • 谢谢,看来数据库位于 PSU 12.1.0.2.160419。我会尝试修复它,看看是否有效。
  • 我认为会的,但我必须等到我们将环境迁移到新主机后才能应用补丁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 2014-12-29
  • 1970-01-01
相关资源
最近更新 更多