使用 PL/SQL 从 Apex Web 服务响应中获取响应头

MLW*_*MLW 3 oracle plsql web-services oracle-apex

我必须得到我的“ apex_web_service.make_rest_request ”的响应头 ”请求。

我知道使用“ UTL_HTTP ”包是可能的,如此处所述:https : //docs.oracle.com/database/121/ARPLS/u_http.htm#BHAHDHHB

但是我怎么能用“ apex_web_service ”做到这一点?甚至有可能吗,因为我在本文档中找不到它?http://docs.oracle.com/database/121/AEAPI/apex_web_service.htm#AEAPI537

预先感谢您的回答!

MLW*_*MLW 6

好的,我现在找到了。答案可以在这里找到:http : //docs.oracle.com/database/121/AEAPI/apex_web_service.htm#AEAPI1933

没有“get_Header()”之类的东西。您设置标头并发送请求(此处为示例代码):

--Set Request Headers
   apex_web_service.g_request_headers(1).name := 'Authorization';
   apex_web_service.g_request_headers(1).value := '[MY API TOKEN]';
   apex_web_service.g_request_headers(2).name := 'Content-Type';
   apex_web_service.g_request_headers(2).value := 'application/json';
   apex_web_service.g_request_headers(3).name := 'Content-Length';
   apex_web_service.g_request_headers(3).value := '[CONTENT LENGTH IN BYTES OF REQUEST BODY]';

       l_lcResult := apex_web_service.make_rest_request(p_url          => 'MY API URL'
                                                       ,p_http_method  => 'POST'
                                                       ,p_body         => 'REQUEST BODY IN JSON FORMAT');
Run Code Online (Sandbox Code Playgroud)

请求后,标头自动“更改”为响应标头。您可以按如下方式获取响应标头:

for i in 1.. apex_web_service.g_headers.count loop
   l_vcHeaderName := apex_web_service.g_headers(i).name;
   l_vcHeaderValue := apex_web_service.g_headers(i).value;
end loop;
Run Code Online (Sandbox Code Playgroud)

如果您正在搜索特定的响应标头(像我一样),您可以使用:

 --Here we search for the header-field called 'Location'    
 for i in 1.. apex_web_service.g_headers.count loop
    l_vcHeaderName := apex_web_service.g_headers(i).name;
    l_vcHeaderValue := apex_web_service.g_headers(i).value;

    exit when l_vcHeaderName = 'Location';
 end loop;

dbms_output.put_line('Name: ' || l_vcHeaderName);
dbms_output.put_line('Value: ' || l_vcHeaderValue);
Run Code Online (Sandbox Code Playgroud)