无法在 Oracle sql Developer 中进行 utl_http.request,我收到错误 ORA-29273 -“HTTP 请求失败”以及更多错误

问题描述 投票:0回答:1

这就是我正在尝试做的事情:

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.
sql oracle plsql
1个回答
0
投票

我需要发出一个 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 无法说明任何信息,但也许您可以在类似问题的答案中获得一些指导。检查这里以及代码示例。

© www.soinside.com 2019 - 2024. All rights reserved.