无论在前端还是在后端,发送HTTP请求都是一件稀松平常的事。
前端可以用jQuery的Ajax方法post、get等,后端语言也都有HTTP请求相关的库可以直接调用。
当时接到在Oracle中用PLSQL发HTTP请求的需求时,我是拒绝的。
但是不小心一查,Oracle还真的支持,PLSQL自带的UTL_HTTP包基本可以满足HTTP请求的所有需求。
代码放在下边,简单做了注释。为了方便取用,请访问我的GitHub:
https://github.com/kaifeiji
create or replace function fnHTTP_REQUEST(param varchar2,
content varchar2) return varchar2 as
/**
*@paramp_dataType返回值类型:json或者xml
*@returnjson或者xml
*/
l_request utl_http.req;
l_response utl_http.resp;
l_result varchar2(32767);
l_url varchar2(4000);
l_param varchar2(4000);
begin
begin
utl_http.set_response_error_check(false);
utl_http.set_body_charset('UTF-8');
--设置请求的地址
l_url:='http://127.0.0.1:8080/api/api_test.jsp';
--设置请求的路径
l_param:='param='||param||'&content='||UTL_URL.escape(content);
--设置用POST方式请求
l_request:=utl_http.begin_request(l_url,'POST');
--设置请求头部
utl_http.set_header(l_request,'Content-Type','application/x-www-form-urlencoded');
UTL_HTTP.SET_HEADER(l_request,'Content-Length',LENGTHB(l_param));
--raw方式写入参数,可以避免中文变乱码
UTL_HTTP.WRITE_RAW (l_request,UTL_RAW.CAST_TO_RAW(l_param));
--发送请求并获取返回结果
l_response := utl_http.get_response(l_request);
if l_response.status_code = 200 then
utl_http.read_text(l_response, l_result, length(l_result));
utl_http.end_response(l_response);
else--错误处理
l_result := '网络访问错误!';
utl_http.end_response(l_response);
end if;
exception--异常处理
when others then
dbms_output.put_line(sqlerrm);
dbms_output.put_line(dbms_utility.format_error_backtrace);
l_result := sqlerrm;
if l_response.status_code is not null then
utl_http.end_response(l_response);
end if;
end;
return l_result;
end;
领取专属 10元无门槛券
私享最新 技术干货