这就是我正在尝试做的事情:
SELECT utl_http.request('openexchangerates.org',NULL,'file:C:/Users/Uchih/OneDrive/Escritorio/wallet','password123') from dual;
我需要发出一个 http.request,来测试与该网站的连接以使用该页面的网络服务。 而且我已经用网页的所有证书配置了我的钱包。 所以钱包应该不是问题
这是我的 acl 代码:
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'otro_acl.xml',
description => 'otra prueba',
principal => 'APEX_220200',
is_grant => TRUE,
privilege => 'connect'
);
END;
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'otro_acl.xml',
principal => 'APEX_220200',
is_grant => TRUE,
privilege => 'resolve'
);
END;
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'otro_acl.xml',
host => 'openexchangerates.org',
lower_port => NULL,
upper_port => NULL
);
END;
我还为我的 hr 用户分配了 te 权限:
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'otro_acl.xml',
principal => 'HR',
is_grant => TRUE,
privilege => 'connect'
);
END;
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'otro_acl.xml',
principal => 'HR',
is_grant => TRUE,
privilege => 'resolve'
);
END;
但是我遇到了这些错误:
ORA-29273: fallo de la solicitud HTTP
ORA-06512: en "SYS.UTL_HTTP", línea 1530
ORA-28759: fallo al abrir el archivo
ORA-06512: en "SYS.UTL_HTTP", línea 651
ORA-06512: en "SYS.UTL_HTTP", línea 1472
ORA-06512: en línea 1
29273. 00000 - "HTTP request failed"
*Cause: The UTL_HTTP package failed to execute the HTTP request.
*Action: Use get_detailed_sqlerrm to check the detailed error message.
Fix the error and retry the HTTP request.
我需要发出一个 http.request,来测试与该网站的连接以使用该页面的 Web 服务。
尚不清楚您是否只想测试与网站的连接(可用性),或者是否想要测试与网站上特定 Web 服务的连接。由于没有有关 webservice/API 的信息,我们所能做的就是使用 UTL_HTTP 测试与“openexchangerates.org”的 url 连接。
以下是用于测试的程序:
create or replace procedure "TEST_REQUEST"
is
BEGIN
Declare
v_body CLOB := empty_clob();
v_buffer VarChar2(32767);
--
mReq UTL_HTTP.req;
mResp UTL_HTTP.resp;
v_url VarChar2(128) := 'openexchangerates.org';
Begin
UTL_HTTP.SET_BODY_CHARSET('UTF-8');
UTL_HTTP.set_transfer_timeout (30);
mReq := UTL_HTTP.BEGIN_REQUEST(v_url, 'POST');
UTL_HTTP.SET_HEADER(mReq, 'Content-type', 'application/json');
UTL_HTTP.SET_HEADER(mReq, 'Content-Length', length(v_body));
UTL_HTTP.WRITE_TEXT(mReq, v_body);
mResp := UTL_HTTP.GET_RESPONSE(mReq);
begin
loop
utl_http.read_line(mResp, v_buffer);
dbms_output.put_line(v_buffer);
end loop;
utl_http.end_response(mResp);
exception
when utl_http.end_of_body then
utl_http.end_response(mResp);
end;
Exception
WHEN OTHERS THEN
dbms_output.put_line(utl_http.get_detailed_sqlerrm);
utl_http.end_response(mResp);
End;
END;
...正在进行测试...
SET SERVEROUTPUT ON
BEGIN
TEST_REQUEST;
END;
/
/* R e s u l t :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://openexchangerates.org/">here</a>.</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at openexchangerates.org Port 80</address>
</body></html>
PL/SQL procedure successfully completed.
*/
因此,utl_http 请求已发送到您的网址,建立了连接并收到了响应。
关于未知的网络服务/API 无法说明任何信息,但也许您可以在类似问题的答案中获得一些指导。检查这里以及代码示例。