开发者社区 问答 正文

使用UTL_HTTP函数包请求Web服务端时发生异常报错:ORA-29259:输入结束,该如何解决?

使用UTL_HTTP函数包请求Web服务端时发生异常报错:ORA-29259:输入结束,该如何解决?

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

代码如下: SELECT utl_http.request('http://172.168.9.218:8080/BusiServer?action=run_proc&token=&action=Download') FROM dual;

展开
收起
5abyqn7wigzqm 2021-10-28 23:44:05 1401 分享 版权
阿里云 AI 助理回答

遇到使用UTL_HTTP函数包请求Web服务端时出现ORA-29259错误,通常意味着在尝试读取HTTP响应时遇到了意外的结束,可能是由于网络问题、服务器未正确响应或者请求参数不正确等原因导致。以下是一些可能的解决步骤:

  1. 检查URL是否正确:首先确认请求的URL是否正确无误,包括端口号和路径。在您的例子中是http://172.168.9.218:8080/BusiServer?action=run_proc,请确保该地址可以正常访问,并且后端服务正在运行。

  2. 检查网络连接:确认数据库服务器与目标Web服务器之间的网络连接是通畅的。可以尝试从数据库服务器上使用ping命令测试目标IP的连通性。

  3. 查看Web服务端日志:检查Web服务端的日志,看是否有接收到请求以及处理请求时的错误信息,这有助于定位问题所在。

  4. 设置超时时间:在请求中增加超时时间设置,以避免因等待响应过长而导致的问题。可以通过UTL_HTTP.SET_TIMEOUT过程来设置连接、读取或传输的超时时间。

    UTL_HTTP.SET_TIMEOUT(utl_http.connection_timeout, 60); -- 设置连接超时为60秒
    UTL_HTTP.SET_TIMEOUT(utl_http.read_timeout, 120);    -- 设置读取超时为120秒
    
  5. 增加错误处理逻辑:在PL/SQL代码中增加异常处理部分,以便于捕获并记录更详细的错误信息,帮助诊断问题。

    DECLARE
      req utl_http.req;
      res utl_http.resp;
      url VARCHAR2(200) := 'http://172.168.9.218:8080/BusiServer?action=run_proc';
      buffer VARCHAR2(32767);
    BEGIN
      req := utl_http.begin_request(url, 'GET');
    
      -- 这里添加其他请求设置
    
      res := utl_http.get_response(req);
    
      LOOP
         utl_http.read_line(res, buffer);
         EXIT WHEN buffer IS NULL;
         -- 处理响应数据
      END LOOP;
    
      utl_http.end_response(res);
    EXCEPTION
      WHEN utl_http.end_of_body THEN
         dbms_output.put_line('End of input reached normally.');
      WHEN OTHERS THEN
         dbms_output.put_line('An error occurred: ' || SQLERRM);
         -- 可以考虑记录到日志表或其他更详细的错误处理
    END;
    
  6. 检查防火墙和安全组设置:确保没有防火墙或安全组规则阻止了从数据库服务器到Web服务端的请求。

如果以上步骤都无法解决问题,可能需要进一步分析网络环境、数据库配置或Web服务端的具体实现细节。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答