oracle发送https请求

参照

https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/u_http.htm#i1025869

https://docs.oracle.com/cd/E11882_01/network.112/e40393/asowalet.htm#ASOAG160

https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_networkacl_adm.htm#ARPLS148

https://docs.oracle.com/cd/E11882_01/network.112/e36292/authorization.htm#DBSEG99980

版本:oracle 11.2.0.4.0

注意:服务器要发送外网http/https请求,配置其ip地址时,一定要配置dns。

配置wallet

要访问https接口,需要启用wallet。

下载证书

https://www.example.org

浏览器输入如上地址,下载证书。

上传至服务器

创建wallet

登录oracle数据库服务器,使用Oracle Wallet Manager新建wallet。

注意:linux系统Oracle Wallet Manager启动命令为owm,完整路径为:

$ORACLE_HOME/bin即/u01/app/oracle/product/11.2.0/dbhome_1/bin。owm需要启动图形界面,所以要使用图形类远程工具,本文中使用XQuartz

ssh -Y oracle@192.168.12.55

输入命令owm,启动Oracle Wallet Manager

会弹出一个提示框提示:默认wallet目录不存在,是否创建

创建即可。然后弹出新建wallet对话框,创建密码。walletpassword123

输入密码后,点击【OK】,提示是否现在就希望创建一个证书请求。选择【No】

点击保存按钮,保存wallet文件至默认位置即可

默认路径为:/u01/app/oracle/product/11.2.0/dbhome_1/owm/wallets/oracle

将之前下载的证书上传至服务器,然后导入信任证书。

导入信任证书

使用mac终端(终端会调用XQuartz,生成图形界面)连接oracle linux服务器,二者LANG都是zh_CN.UTF-8。owm图形界面显示乱码。关闭owm图形界面,直接在终端中输入命令设置LANG,export LANG=en_US.UTF-8,再次输入owm显示图形界面则正常。

保存后,将新生成的文件ewallet.p12

由/u01/app/oracle/product/11.2.0/dbhome_1/owm/wallets/oracle中复制到

/u01/app/oracle/wallet,覆盖原先的 ewallet.p12,用于发送https请求时,设置上下文。

发送请求

oracle发送https请求与发送http请求没有本质的不同,只是需要在发送前在请求上下文中加入wallet信息。

简单示例

存储过程

set serveroutput on

declare

request_context UTL_HTTP.REQUEST_CONTEXT_KEY;

req UTL_HTTP.REQ;

resp UTL_HTTP.RESP;

data VARCHAR2(10240);

BEGIN

request_context := UTL_HTTP.CREATE_REQUEST_CONTEXT(

wallet_path => 'file:/u01/app/oracle/wallet',

wallet_password => 'walletpassword123'

--enable_cookies => TRUE,

--max_cookies => 300,

--max_cookies_per_site => 20

);

req := UTL_HTTP.BEGIN_REQUEST(url => 'https://www.example.org',method => 'GET',request_context => request_context);

resp := UTL_HTTP.GET_RESPONSE(req);

BEGIN

LOOP

UTL_HTTP.READ_LINE(resp, data);

DBMS_OUTPUT.PUT_LINE(data);

-- DBMS_OUTPUT.PUT_LINE(instr(data,'access_token'));

END LOOP;

EXCEPTION

WHEN UTL_HTTP.END_OF_BODY THEN

UTL_HTTP.END_RESPONSE(resp);

END;

-- Destroy the request context

UTL_HTTP.DESTROY_REQUEST_CONTEXT(request_context);

END;

效果截图

相关推荐
Omics Pro38 分钟前
首个针对生物医药LLM智能体的全流程过程级评测框架
数据库·人工智能·windows·redis·量子计算
要开心吖ZSH1 小时前
MVCC 进阶:快照读 vs 当前读、幻读与 Next-Key Lock
java·数据库·sql·mysql·mvcc
水木流年追梦1 小时前
agent面试必备31- AI Agent 核心进阶:工具路由(Tool Routing)
数据库·人工智能·oracle·面试·职场和发展·embedding
xcLeigh1 小时前
KES运维自动化与脚本体系实战
运维·数据库·自动化·脚本·数据迁移·kes
大气的小蜜蜂2 小时前
领域层的服务
java·前端·数据库
翔云1234562 小时前
简单概括主库上 Executed_Gtid_Set 是什么时候更新的
数据库·mysql
火星校尉2 小时前
一场数据基建与消费场景的跨界实验
java·前端·数据库·python·php
平安的平安2 小时前
从“云端排队“到“边缘上岗“:DolphinDB 云边协同如何重塑工业现场的实时智能
数据库
懒鸟一枚2 小时前
为什么 useradd -rs /bin/false service 创建的用户无法用 su 切换?
linux·服务器·数据库
爱喝热水的呀哈喽2 小时前
hypermesh两个网格参数解析
服务器·数据库·mysql