Oracle的HTTP请求

/**
   * 模块:HTTP模块
   * 功能:请求http
   * 参数:p_url:地址
   *      p_method:GET/POST
   *      p_pay_load:如果为post,携带的内容
   * 返回:调用返回的字符串
   **/
  FUNCTION get_http(p_url varchar2, p_method varchar2, p_pay_load varchar2) return varchar2 Is
  Req     Utl_Http.Req;
  Resp    Utl_Http.Resp;
  Message Varchar2(30000) := '';
  tempstr Varchar2(30000) := '';
  Begin
    Begin
      Req := Utl_Http.Begin_Request(p_url, p_method);
      Utl_Http.Set_Header(Req,'Content-Type','application/json;charset=utf-8');
      --post方式提交的内容
      if p_pay_load is not null then
         Utl_Http.Set_Header(Req,'Content-Length', Lengthb(p_pay_load));
         Utl_Http.Write_Text(Req, p_pay_load);
      end if;
      Resp := Utl_Http.Get_Response(Req);
      --设置返回的结果为utf-8编码
      Utl_Http.set_body_charset(r=> Resp, charset=>'utf-8');
      Loop
        Utl_Http.Read_Line(Resp, tempstr, True);
        Message := Message||tempstr;
      End Loop;
      --Dbms_Output.Put_Line('get_http返回结果:'||Message);

      Utl_Http.End_Request(Req);
      Utl_Http.End_Response(Resp);
    Exception
      --Read_Line读取结束后,返回数据
      When Utl_Http.End_Of_Body Then
        Utl_Http.End_Response(Resp);
        return Message;
      When Others Then
        Utl_Http.End_Response(Resp);
        Utl_Http.End_Request(Req);
    End;
    return Message;
  End;

  /**
   * 模块:HTTP模块
   * 功能:请求http
   * 参数:p_url:地址
   *      p_method:GET/POST
   *      p_pay_load:如果为post,携带的内容
   * 返回:调用返回的字符串
   **/
  FUNCTION get_http_clob(p_url varchar2, p_method varchar2, p_pay_load varchar2) return clob Is
  Req     Utl_Http.Req;
  Resp    Utl_Http.Resp;
  Message Varchar2(32767) := '';
  tempstr Varchar2(32767) := '';
  rsp_clob clob; --响应blob格式数据
  Begin
    Begin
      Req := Utl_Http.Begin_Request(p_url, p_method);
      Utl_Http.Set_Header(Req,'Content-Type','application/json;charset=utf-8');
      --post方式提交的内容
      if p_pay_load is not null then
         Utl_Http.Set_Header(Req,'Content-Length', Lengthb(p_pay_load));
         Utl_Http.Write_Text(Req, p_pay_load);
      end if;
      Resp := Utl_Http.Get_Response(Req);
      --设置返回的结果为utf-8编码
      Utl_Http.set_body_charset(r=> Resp, charset=>'utf-8');
      --在用户的临时表空间中,建立响应临时LOB且读取到缓冲区
      dbms_lob.createtemporary(rsp_clob, true);
      Loop
        --Utl_Http.Read_Line(Resp, tempstr, True);
        --Message := Message||tempstr;
        --返回的数据很大,但是就是一行数据,太长的数据放到str里面会报错
        Utl_Http.read_text(Resp, Message, 30000);
        dbms_lob.append(rsp_clob, Message);
      End Loop;
      --Dbms_Output.Put_Line('get_http返回结果:'||Message);

      --dbms_lob.freetemporary(rsp_clob);
      Utl_Http.End_Request(Req);
      Utl_Http.End_Response(Resp);
    Exception
      --Read_Line读取结束后,返回数据
      When Utl_Http.End_Of_Body Then
        Utl_Http.End_Response(Resp);
        return rsp_clob;
      When Others Then
        Utl_Http.End_Response(Resp);
        Utl_Http.End_Request(Req);
    End;

    return rsp_clob;
  End;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值