当前位置: 首页 > news >正文

【Oracle】调用HTTP接口

Oracle调用http接口

    • 前情提要
    • 1.创建HTTP请求函数
    • 2.创建ACL并授予权限
    • 3.测试HTTP请求函数
      • 其他操作
    • 一点建议
    • 参考文档

前情提要

公司唯有oracle被允许访问内外网,因此在oracle中发起HTTP请求。

1.创建HTTP请求函数

CREATE OR REPLACE FUNCTION HTTP_REQUEST(v_url  VARCHAR2,--請求地址v_param  VARCHAR2,--POST請求參數-->>'muser=32323&&passwd=232323';GET拼接URLv_type  varchar2--類型)return varchar2 is--GET--req UTL_HTTP.REQ;resp UTL_HTTP.RESP;v_line VARCHAR2 ( 4000 );v_text VARCHAR2 ( 4000 );v_param_length NUMBER ;--post--beginIF V_TYPE='GET' THEN  v_text := '';req := UTL_HTTP.BEGIN_REQUEST ( url => v_url, method => 'GET' );UTL_HTTP.SET_BODY_CHARSET('UTF-8');UTL_HTTP.SET_HEADER(req, 'Content-Type', 'application/json');resp := UTL_HTTP.GET_RESPONSE ( req );UTL_HTTP.READ_LINE ( resp, v_line, TRUE );v_text := v_text || v_line;UTL_HTTP.END_RESPONSE( resp );  ELSEv_param_length  := LENGTHB(v_param);req := UTL_HTTP.BEGIN_REQUEST (url=> v_url, method => 'POST');UTL_HTTP.SET_BODY_CHARSET('UTF-8');UTL_HTTP.SET_HEADER (r      =>  req,name   =>  'Content-Type',VALUE  =>  'application/json');UTL_HTTP.SET_HEADER (r      =>   req,name   =>   'Content-Length',VALUE  =>   v_param_length);UTL_HTTP.WRITE_RAW (r    => req,data => UTL_RAW.CAST_TO_RAW(v_param)); resp := UTL_HTTP.GET_RESPONSE(req);UTL_HTTP.READ_LINE(resp, v_text, TRUE);UTL_HTTP.END_RESPONSE(resp);END IF;return v_text;EXCEPTIONWHEN UTL_HTTP.END_OF_BODY THENUTL_HTTP.END_RESPONSE ( resp );WHEN OTHERS THENUTL_HTTP.END_RESPONSE(resp);UTL_HTTP.END_REQUEST(req);end;

2.创建ACL并授予权限

-- 验证数据库用户是否存在
SELECT username FROM dba_users WHERE username = 'WXGZH';-- 如果用户不存在,创建用户
BEGINEXECUTE IMMEDIATE 'CREATE USER wxgzh IDENTIFIED BY password'; -- 替换 password 为实际密码EXECUTE IMMEDIATE 'GRANT CONNECT TO wxgzh';
END;-- 创建 ACL 并授予权限
BEGINDBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl         => 'http_request_acl.xml',description => 'Allow HTTP requests',principal   => 'WXGZH', -- 确保使用正确的大小写is_grant    => TRUE,privilege   => 'connect');DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl         => 'http_request_acl.xml',host        => '192.168.0.19',lower_port  => 18882,upper_port  => 18882);
END;-- 提交更改
COMMIT;-- 验证 ACL 配置
SELECT acl, principal, privilege, is_grant
FROM dba_network_acl_privileges
WHERE principal = 'WXGZH'; -- 确保使用正确的大小写

3.测试HTTP请求函数

-- 测试 HTTP 请求函数
SELECT HTTP_REQUEST('http://192.168.0.1:8080/commonMsg/pushMsg?id=2', '{}', 'POST') AS data FROM dual;

其他操作

-- 查询ACL的权限
-- 字段说明 ACL-文件所在位置,principal-拥有权限的用户名,privilege-拥有的权限
SELECT * FROM dba_network_acl_privileges-- 查询ACL开放的ip端口权限
SELECT * FROM DBA_NETWORK_ACLS-- 追加ip
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl         => 'http_request_acl.xml',host        => '127.0.0.1',lower_port  => 8080,upper_port  => 8080
);
END;
COMMIT;

一点建议

在oracle中发起http请求对oracle压力比较大,建议不要将完整报文都丢给oracle进行调用。
建议的方式是,请求报文在某个地方存储起来,然后入参就传递一个ID。接收方通过ID进行查询完整的报文。

参考文档

链接: 一篇文章带你了解Oracle 11G 中的访问控制列表 (ACL)

http://www.lryc.cn/news/380753.html

相关文章:

  • Minillama3->sft训练
  • 【教师资格证考试综合素质——法律专项】学生伤害事故处理办法以及未成人犯罪法笔记相关练习题
  • Vite: 关于静态资源的处理机制
  • React之useEffect
  • 测试辅助工具(抓包工具)的使用3 之 弱网测试
  • 【Redis】基于Redission实现分布式锁(代码实现)
  • websocket 安全通信
  • 代码生成技术技术-janino
  • QT事件处理系统之四:自定义事件的注册及拦截、发送
  • vs2022 studio控制台出现中文乱码解决
  • 支持向量机介绍
  • 电压互感器在线监测的原理
  • 算法训练与程序竞赛题目集合(L4)
  • Selenium进行Web自动化测试
  • 模拟算法讲解
  • Leetcode 3196. Maximize Total Cost of Alternating Subarrays
  • Elasticsearch**Elasticsearch自定义插件开发入门
  • 在Ubuntu中创建Ruby on Rails项目并搭建数据库
  • 微信小程序反编译 2024 unveilr.exe
  • 测试测量-DMM直流精度
  • AGV机器人的调度开发分析(2)- 内核中的调度
  • HTTP详细总结
  • 【Android】代码中将 SVG 图像转换颜色
  • 网络故障排查-TCP标志位
  • [Vue3+Vite+TS] Windows用户设置 VITE_CJS_TRACE=true 标志运行你的脚本来记录堆栈跟踪
  • Prompt 写作提示经验:完整格式和技巧
  • 预训练是什么?
  • 深入解析Linux Bridge:原理、架构、操作与持久化配置
  • 使用构建缓存优化 Docker 镜像构建
  • 微软搁置水下数据中心项目——项目纳蒂克相比陆地服务器故障更少