做公司网站哪家 上海,北京专业网站制作介绍,建网站 xyz,厂 网站 南宁Oracle调用http接口 前情提要1.创建HTTP请求函数2.创建ACL并授予权限3.测试HTTP请求函数其他操作 一点建议参考文档 前情提要
公司唯有oracle被允许访问内外网#xff0c;因此在oracle中发起HTTP请求。
1.创建HTTP请求函数
CREATE OR REPLACE FUNCTION HTTP_REQUEST(v_url … 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請求參數--muser32323passwd232323;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_TYPEGET 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?id2, {}, 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)