ITPub博客

首页 > 数据库 > Oracle > oracle使用utl_http包发送post请求

oracle使用utl_http包发送post请求

原创 Oracle 作者:lsq_008 时间:2016-04-21 09:34:51 0 删除 编辑
使用plsq发送post或get请求,开始发送中文时有乱码,网上搜了半天,终于找到解决办法,关键点见红色字体部分,记录以备忘:
set serveroutput on;
exec dbms_output.enable(1000000000);
set escape '\'
DECLARE
  req   UTL_HTTP.REQ;
  resp  UTL_HTTP.RESP;
  value VARCHAR2(1024);  -- URL to post to
   v_url VARCHAR2(200) := 'http://ip:port/xxx';
  -- Post Parameters
  v_param VARCHAR2(500) := 'para1=xxx\?2=xxxx\?3=xxxx';
  v_param_length NUMBER := LENGTHB(v_param);
BEGIN
  -- Set up proxy servers if required
  --  UTL_HTTP.SET_PROXY('proxy.my-company.com', 'corp.my-company.com');
  req := UTL_HTTP.BEGIN_REQUEST (url=> v_url, method => 'POST');
  --  UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
  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);
  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;
/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10972173/viewspace-2085171/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: redis持久化策略
请登录后发表评论 登录
全部评论
十余年大型金融及电信系统数据库管理经验,曾服务于中国建设银行、中国移动。对oracle,mysql数据库有深入了解。 擅长python开发,独立开发了开源数据库自动化监控运维平台Power Monitor。

注册时间:2008-02-29

  • 博文量
    335
  • 访问量
    1369122