/**
* 模块: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;