返回首页> Oracle > 使用Oracle发送http请求
跳过导航链接

使用Oracle发送http请求

文章摘要: 使用Oracle发送http请求,实现的思路是:在某张表上配置触发器,该触发器调用存储过程,使用存储过程执行http请求的发送。 需要注意的几点是: 1、http post请求,在发送的时候,跟数据库的字符集有关,在处理不当的时候,会出现乱码问题。 2、oracle访问网络服务的时候,需要配置acl权限。 创建触发器: CRE...
 

使用Oracle发送http请求,实现的思路是:在某张表上配置触发器,该触发器调用存储过程,使用存储过程执行http请求的发送。

需要注意的几点是:

1http post请求,在发送的时候,跟数据库的字符集有关,在处理不当的时候,会出现乱码问题。

2oracle访问网络服务的时候,需要配置acl权限。

创建触发器:

CREATE OR REPLACE TRIGGER “T_POST4REQHAND” AFTER INSERT ON “REQUESTHANDLERINFO” REFERENCING OLD AS “OLD” NEW AS “NEW” FOR EACH ROW declare

begin PRO_POSTREQ(:new.id,:new.params);

end T_POST4REQHAND;

create or replace procedure “PRO_POSTREQ”(r_id in varchar2,params in varchar2) as begin

  DECLARE

req UTL_HTTP.REQ; resp UTL_HTTP.RESP;

value VARCHAR2(1024); – URL to post to v_url VARCHAR2(4000) := ‘http://192.168.0.156:8080/bzjw_platform/f/responseresult/responseResult/invokeOutRequest?rid=’||r_id||’&¶ms’||params;

v_param VARCHAR2(4000) := ‘1’;

  v_param_length NUMBER := LENGTHB(v_param);

BEGIN DBMS_OUTPUT.ENABLE (buffer_size=>null);

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/x-www-form-urlencoded’); UTL_HTTP.SET_HEADER(req, ‘Keep-Alive’, ’ timeout=1‘);

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);

LOOP UTL_HTTP.READ_LINE(resp, value, TRUE);

DBMS_OUTPUT.PUT_LINE(value); END LOOP;

UTL_HTTP.END_RESPONSE(resp); EXCEPTION

WHEN UTL_HTTP.END_OF_BODY THEN UTL_HTTP.END_RESPONSE(resp);

END; end PRO_POSTREQ;

?

create or replace procedure "PRO_POSTREQ"(r_id in varchar2,params in varchar2) as

begin

 

DECLARE

  req   UTL_HTTP.REQ;

  resp  UTL_HTTP.RESP;

  value VARCHAR2(1024);  -- URL to post to

   v_url VARCHAR2(4000) := 'http://192.168.0.156:8080/bzjw_platform/f/responseresult/responseResult/invokeOutRequest?rid='||r_id||'&¶ms'||params;

   v_param VARCHAR2(4000) := '1';

 

  v_param_length NUMBER := LENGTHB(v_param);

BEGIN

   DBMS_OUTPUT.ENABLE (buffer_size=>null);

  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/x-www-form-urlencoded');

  UTL_HTTP.SET_HEADER(req, 'Keep-Alive', '  timeout=1');

  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);

  LOOP

    UTL_HTTP.READ_LINE(resp, value, TRUE);

    DBMS_OUTPUT.PUT_LINE(value);

  END LOOP;

  UTL_HTTP.END_RESPONSE(resp);

EXCEPTION

  WHEN UTL_HTTP.END_OF_BODY THEN

    UTL_HTTP.END_RESPONSE(resp);

END;

end PRO_POSTREQ;

 

该请求为post,但是所有的参数传递均放置在URL中,原因是,放置在v_param 这个参数中时,数据库字符集为utf8的时候,一切正常,但是若是gbk,则发生乱码。

原因是 oracle的参数拼接字符 “||”会进行一次编码。 按照网上所说的,使用转码等一系列操作,最终仍没有解决。

 

定义ACL,若没有ACL,则无法访问网络。

 

–定义ACL 取名:httprequestpermission.xml

BEGIN dbms_network_acl_admin.create_acl(acl => ’httprequestpermission.xml’,

DESCRIPTION => ’Normal Access’, principal => ’CONNECT’,

is_grant => TRUE, PRIVILEGE => ’connect’,

start_date => NULL, end_date => NULL);

END;

–查看ACL是否增加成功 SELECT any_path

FROM resource_view where any_path like ‘/sys/acls/%.xml’

;

–给用户增加acl权限,这里是 SD_JY 注意是大写,小写不识别 begin dbms_network_acl_admin.add_privilege(acl => httprequestpermission.xml,

principal => ’SD_JY’, is_grant => TRUE,

privilege => ’connect’, start_date => null,

end_date => null); end;

 

–添加对应主机 ,将对应主机和端口添加到ACL。这里是 192.168.0.156 8080 ,这个ip和端口要和上面存储过程中定义的地址一致 begin

dbms_network_acl_admin.assign_acl(acl => ’httprequestpermission.xml’, host => ’192.168.0.156’,

lower_port => 8080, upper_port => NULL);

end;

SELECT acl, principal,

privilege, is_grant,

TO_CHAR(start_date, ’DD-MON-YYYY’) AS start_date, TO_CHAR(end_date, ’DD-MON-YYYY’) AS end_date

FROM dba_network_acl_privileges;

 

上一篇:Oracle存储过程调用java程序
下一篇:Oracle高级查询:分组查询
文章摘要: Oracle高级查询:分组查询,Oracle高级查询--分组查询篇,什么是分组函数?分组函数作用于一组数据,并对一组数据返回一个值。常用的分组函数为AVG、SUM、MIN、MAX、COUNT、WM_CONCAT。 1.1 Oracle分组函数1 使用AVG(平均值)和SUM(合计)函数 select avg(sal),sum(sal) from emp; 使用MIN(最小值)和MAX(最大值)函数 select max(sal),min(sal) from emp; 使用COUNT(计数)函数 select count(*) from emp; 使用...

相关资讯

◆Oracle培训:Oracle数据泵导入dmp文件 ◆Oracle培训:Oracle手工建库出现ORA-01519错误 ◆Oracle培训:Oracle CDC部署 ◆Oracle培训:Oracle 12c创建可插拔数据库(PDB)及用户 ◆Oracle EXP和IMP使用方法介绍 ◆微软将在Office中引入人工智能 ◆微软发Surface Pro 4/Studio固件更新日志 ◆微软:AI人工智能应该帮助,而不是替代人 ◆微软推出WDATP强化企业终端威胁防护 ◆Windows申请免费SSL证书-Let's Encrypt ◆思科ASAP助力全数字化时代数据中心创新 ◆怎样选择合适的PoE交换机? ◆思科持续保持企业基础设施市场优势 ◆网络工程师需要的8项技能 ◆思科IOS中改善CLI的用户体验 ◆H3C交换机以太网端口类型 ◆H3C交换机做DHCP ◆H3C交换机常用配置命令 ◆新华三集团总裁兼首席执行官于英涛2017年会致辞 ◆新华三加速云落地 ◆RHEL7 配置VNC远程桌面 ◆RHEL7利用iso镜像制作本地yum源 ◆RHEL6 学习笔记 ◆RedHat5和RedHat6 配置yum源详解 ◆RedHat7上为Nginx编译安装nginx_push_stream_module ◆是否有必要参加PMP考试培训 ◆该怎么选择PMP培训公司 ◆企业为什么需要IT配置管理及其如何使用 ◆PMP考试心得 ◆IT资产管理与ITIL配置管理的区别和联系 ◆Juniper用户快更新:Junos OS、SRX有DoS漏洞 ◆Juniper防火墙之恢复出厂默认设置 ◆Juniper SSG双机高可用(HA)平滑升级经验分享 ◆高盛:Juniper市场表现将超过Cisco和Arista ◆Juniper收购云管理公司AppFormix ◆F5 Network:让爱点亮世界 ◆F5发布2017年应用交付状态报告 ◆除F5外,其他负载均衡软件的优缺点 ◆负载均衡的那些算法们 ◆F5配置手册:设备初始化配置 ◆Oracle培训:Oracle数据泵导入dmp文件 ◆Oracle培训:Oracle手工建库出现ORA-01519错误 ◆Oracle培训:Oracle CDC部署 ◆Oracle培训:Oracle 12c创建可插拔数据库(PDB)及用户 ◆Oracle EXP和IMP使用方法介绍 ◆VMware中CentOS 6.6的kdump启动失败解决 ◆VMware NSX升级:微细分、安全启动和支持非vSphere环境 ◆VMware虚拟化培训:虚拟化的基础知识 ◆VMware发布2016数字化工作空间现状报告 ◆VMware助力广州科政实现恒大集团打造全虚拟化数据中心 ◆戴尔EMC补丁在VMAX存储系统中出现漏洞 ◆EMC进行SAN拆分,解决更细化的存储需求 ◆EMC数据中心全闪存年,机架级闪存可让Hadoop提速10倍 ◆EMC发布2016年新品和技术路线 ◆重新定义企业IT,EMC联手VMware推超融合 ◆最近面试的大数据岗位的公司经历 ◆用大数据预测雾霾,已获得环保部订单的微软是如何做到的? ◆大数据学习经验 ◆身处大数据时代,大数据这些误区你知道吗 ◆大数据分析促进人才招聘 ◆云计算SaaS采用要考虑的5大因素 ◆如何构建一个私有存储云 ◆云计算的三大支柱 ◆云计算的真正价值不仅仅是节省开支 ◆云计算将改变我们的生活? ◆Apache Spark也有不完美 ◆Spark将机器学习与GPU加速机制纳入自身 ◆spark作业调优 ◆Spark基本工作流程及YARN cluster模式原理 ◆从Spark 2.0版的推出,看开源大数据技术的商业化发展 ◆EasyStack郭长波当选OpenStack基金董事 ◆OpenStack私有云:好处、挑战和未来 ◆在Openstack上创建并访问Kubernetes集群 ◆思科公司关闭基于OpenStack的公共云 ◆2017年OpenStack管理员认证会不会火? ◆IBM和Bell联手共同打造苹果iOS企业应用 ◆IBM首席执行官提出人工智能部署三大基本原则 ◆调研IBM与西门子:软件将是工业的未来! ◆IBM在美获专利最多 ◆IBM闪存迎接新挑战 ◆Hadoop创始人Doug Cutting寄语2017:五种让开源项目成功的方法 ◆基于Ubuntu Hadoop的群集搭建Hive ◆HDFS以及HBase动态增加和删除节点 ◆Cloudera提供课程帮助缩小数据技能差距 ◆Cloudera提供课程帮助缩小数据技能差距 ◆扩大与Azure合作,思杰力推超融合基础设施上部署VDI ◆MapReduce工作流多种实现方式 ◆Citrix虚拟化技术:XenServer6.2资源池配置 ◆Citrix虚拟化技术:XenServer6.2虚拟机创建 ◆Citrix虚拟化技术:XenServer6.2存储管理 ◆2017年十大最热IT技能:安全位列其中 ◆筑牢个人信息安全防火墙 ◆2016年最热门的六大IT职位 ◆CISP认证和CISSP认证区别 ◆成为CISSP的理由