无论在前端还是在后端,发送 HTTP 请求都是一件稀松平常的事。
前端可以用 jQuery 的 Ajax 方法 post、get 等,后端语言也都有 HTTP 请求相关的库可以直接调用。
当接到使用 Oracle 发起 HTTP 请求的需求时,我是拒绝的。
但是不小心一查,还真的支持,Oracle 自带的 UTL_HTTP 包真的可以发起 HTTP 请求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| create or replace function fnHTTP_REQUEST(param varchar2,content varchar2) return varchar2 is 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); 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)); 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;
|