重新表述问题 Oracle pl/sql 和 webservice 的问题

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

我将把它放在上下文中,以便您更好地了解问题:

  • 我的电脑上安装了 Oracle 21c Xe 和 sqldeveloper

  • 我想使用Web服务、GET方法和令牌从apirest获取纳税人的数据。

  • 要获取数据,您必须注明网址加上纳税人代码,例如“https://apiperu.dev/api/ruc/10292035999”

  • 根据我看到的论坛和视频,他们告诉我以下内容:

  • 从页面下载证书。

  • 创建钱包

  • 参考默认文件夹:从 V$ENCRYPTION_WALLET 选择 WRL_PARAMETER;

  • 结果:“C:\APP\USER\Product C\ADMIN\XE\WALLET”

  • 证书已创建并分配给钱包:

oracle http token
1个回答
0
投票
I'm going to put it in context so that you have a better vision of the problem:

- I have Oracle 21c Xe and sqldeveloper installed on my pc
- I want to obtain the data of a taxpayer from an apirest using a webservice, the "GET" method and a token.
- To obtain the data, you must indicate the url plus the taxpayer code, example "https://apiperu.dev/api/ruc/10292035999"
- According to the forums and videos I saw, they told me the following:
Download the certificate from the page.
- create a wallet
   - The default folder was consulted with:
      select WRL_PARAMETER FROM V$ENCRYPTION_WALLET;
      and resulted
      "C:\APP\USER\PRODUCT\21C\ADMIN\XE\WALLET"

- The certificate was created and assigned to the wallet:
   orapki wallet create -wallet
   C:\APP\USER\PRODUCT\21C\ADMIN\XE\WALLET -pwd
   Abcd1234 -auto_login

   orapki wallet add -wallet
   C:\APP\USER\PRODUCT\21C\ADMIN\XE\WALLET -cert
   "c:\Temp\Wallet\ISRG_Root_X1.crt" -trusted_cert -pwd Abcd1234
  
   orapki wallet display -wallet
   C:\APP\USER\PRODUCT\21C\ADMIN\XE\WALLET -pwd
   Abcd1234

- I verified that the configuration is correct:
select * FROM DBA_WALLET_ACLS;

- A test was done with the certificate:
   exec
  utl_http.set_wallet('file:C:\app\User\product\21c\admin\XE\wallet',
   'Abcd1234');

- There was no problem

- ACL is configured:
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => '/sys/acls/search2.xml',
description => 'HTTP Permissions',
main => 'SYSTEM',
is_grant => TRUE,
privilege => 'connect'
);
END;

BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => '/sys/acls/search.xml',
host => 'apiperu.dev'
);
END;

BEGIN
dbms_network_acl_admin.add_privilege (
acl => '/sys/acls/search.xml',
main => 'SYSTEM',
is_grant => TRUE,
privilege => 'connect'
);
END;

BEGIN
dbms_network_acl_admin.add_privilege (
acl => '/sys/acls/search.xml',
main => 'SYSTEM',
is_grant => TRUE,
privilege => 'resolve'
);
END;

BEGIN
dbms_network_acl_admin.assign_wallet_acl (
acl => '/sys/acls/search.xml',
wallet_path => 'file:C:\APP\USER\PRODUCT\21C\ADMIN\XE\WALLET'
);
commit;
END;

- Verification was done
   select * FROM DBA_NETWORK_ACLS;
   select * FROM DBA_NETWORK_ACL_PRIVILEGES;

- The program was executed:
DECLARE
service_url VARCHAR2(1000) := 'https://apiperu.dev/api/ruc/10292035999';
user_agent VARCHAR2(100) := 'Mozilla/4.0';
accept_encoding VARCHAR2(100) := 'gzip, deflate, br';
connection VARCHAR2(100) := 'keep-alive';
req UTL_HTTP.req;
res UTL_HTTP.resp;
buffer VARCHAR2(32767);
response_data CLOB;
detailed_error VARCHAR2(4000);
BEGIN
     UTL_HTTP.set_wallet('file:C:\app\User\product\21c\admin\XE\wallet', 'Abcd1234');
    
req := UTL_HTTP.begin_request(service_url, 'GET');
    
UTL_HTTP.set_header(req, 'Authorization', 'Bearer 8df9a4f5abf9604b09274bb0a95f59f7bbc1b8ba322fadca2b36bfe549bb5c41');
UTL_HTTP.set_header(req, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.set_header(req, 'Content-Type', 'application/json');
UTL_HTTP.set_header(req, 'Accept-Encoding', 'gzip, deflate, br');
UTL_HTTP.set_header(req, 'Connection', 'keep-alive');
    
res := UTL_HTTP.get_response(req);
    
LOOP
UTL_HTTP.read_text(res, buffer, 32766);
response_data := response_data || buffer;
END LOOP;
    
UTL_HTTP.end_response(res);
    
IF res.status_code = 200 THEN
DBMS_OUTPUT.put_line('Customer data:');
DBMS_OUTPUT.put_line(response_data);
ELSE
detailed_error := DBMS_UTILITY.format_error_stack || DBMS_UTILITY.format_error_backtrace || DBMS_UTILITY.format_error_backtrace;
DBMS_OUTPUT.put_line('Error getting data from client. Response code: ' || res.status_code);
DBMS_OUTPUT.put_line('Error details: ' || detailed_error);
END IF;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.end_response(res);
WHEN OTHERS THEN
detailed_error := DBMS_UTILITY.format_error_stack || DBMS_UTILITY.format_error_backtrace || DBMS_UTILITY.format_error_backtrace;
DBMS_OUTPUT.put_line('General error: ' || SQLERRM);
DBMS_OUTPUT.put_line('Error details: ' || detailed_error);
END;
/

This is all the process. When I run the program I get the following:

General error: ORA-29273: HTTP request failure
Error details: ORA-29273: HTTP request failure
ORA-28759: failure to open file
ORA-06512: in "SYS.UTL_HTTP", line 380
ORA-06512: in "SYS.UTL_HTTP", line 1148
ORA-06512: in "SYS.UTL_HTTP", line 380
ORA-06512: in "SYS.UTL_HTTP", line 1148
ORA-06512: online 14
ORA-06512: in "SYS.UTL_HTTP", line 380
ORA-06512: in "SYS.UTL_HTTP", line 1148
ORA-06512: online 14

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