oracle访问 http 接口服务(restful)

今天遇到一个需求Oracle访问 HTTP接口服务,restful风格的

--v_url  --请求地址
--v_param--POST请求参数 
--v_type--请求类型 post get
FUNCTION F_WS_CLIT(v_url  VARCHAR2,v_param  VARCHAR2,v_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--
begin
    IF 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/x-www-form-urlencoded');
          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 );

    ELSE
          v_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/x-www-form-urlencoded');
          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;
EXCEPTION
            WHEN UTL_HTTP.END_OF_BODY THEN
            UTL_HTTP.END_RESPONSE ( resp );
            WHEN OTHERS THEN
            UTL_HTTP.END_RESPONSE(resp);
            UTL_HTTP.END_REQUEST(req);
end F_WS_CLIT;

测试报错

ORA-06512: 在 "SYS.UTL_HTTP" ...
ORA-06512: 在 "SYS.UTL_HTTP" ...
ORA-29273: HTTP 请求失败
ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝

需要开通Oracle网络控制列表权限
访问成功;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值