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;

效果截图

相关推荐
Element_南笙7 分钟前
吴恩达新课程:Agentic AI(笔记2)
数据库·人工智能·笔记·python·深度学习·ui·自然语言处理
长安城没有风13 分钟前
从入门到精通【Redis】Redis 典型应⽤ --- 分布式锁
数据库·redis·分布式
Ytadpole14 分钟前
MySQL 数据库优化设计:优化原理和数据库表设计技巧
数据库·mysql·优化·索引·查询·检索·表设计
christine-rr1 小时前
数据库基础概念体系梳理
数据库·oracle
SirLancelot11 小时前
StarRocks-基本介绍(一)基本概念、特点、适用场景
大数据·数据库·数据仓库·sql·数据分析·database·数据库架构
Boop_wu1 小时前
[MySQL] 基础操作
数据库·mysql
6极地诈唬2 小时前
【sqlite】xxx.db-journal是什么?
数据库·sqlite
小糖学代码3 小时前
MySQL:14.mysql connect
android·数据库·mysql·adb
爬山算法4 小时前
Redis(69)Redis分布式锁的优点和缺点是什么?
数据库·redis·分布式
RestCloud4 小时前
从数据库到价值:ETL 工具如何打通南大通用数据库与企业应用
数据库