使用APEX_WEB_SERVICE.MAKE_REST_REQUEST如何获取HTTP响应错误信息
解决方法
1. 调整请求参数禁用自动抛错
调用APEX_WEB_SERVICE.MAKE_REST_REQUEST时,显式传入p_raise_error_on_http_error => FALSE,这是获取非2xx状态响应内容的核心配置。默认情况下该参数为TRUE,只要返回4xx、5xx状态码函数就会直接抛出异常,响应体、头信息等全局变量都会被重置,自然无法读取。
示例代码如下:
DECLARE l_resp_clob CLOB; BEGIN l_resp_clob := APEX_WEB_SERVICE.MAKE_REST_REQUEST( p_url => '你的目标请求地址', p_http_method => 'POST', -- 替换为实际请求方法 p_raise_error_on_http_error => FALSE ); -- 请求完成后读取状态码判断结果 IF apex_web_service.g_status_code NOT BETWEEN 200 AND 299 THEN -- 此处l_resp_clob就是非成功状态的响应体内容 dbms_output.put_line('错误状态码:' || apex_web_service.g_status_code); dbms_output.put_line('错误响应内容:' || l_resp_clob); -- 头信息也可以正常从apex_web_service.g_headers读取 FOR i IN 1..apex_web_service.g_headers.count LOOP dbms_output.put_line(apex_web_service.g_headers(i).name || ':' || apex_web_service.g_headers(i).value); END LOOP; END IF; END; /
2. 直接捕获异常获取调试显示的错误文本
如果你不需要完整响应体,只需要获取调试界面显示的HTTP response 405 - <message>这串内容,可以直接捕获函数抛出的异常,通过SQLERRM就能拿到完整的错误文本:
DECLARE l_resp_clob CLOB; BEGIN l_resp_clob := APEX_WEB_SERVICE.MAKE_REST_REQUEST( p_url => '你的目标请求地址', p_http_method => 'POST' ); EXCEPTION WHEN OTHERS THEN dbms_output.put_line('错误信息:' || SQLERRM); END; /
内容的提问来源于stack exchange,提问作者ES.
相关产品推荐
相关产品推荐

