PLSQL调用multipart/form-data类型的接口
适用于Oracle EBS
declare
l_attachment blob;
l_newline varchar2(50) := chr(13) || chr(10);
lco_boundary constant varchar2(30) := 'you key refference POSTMAN script ';
l_http_request utl_http.req;
l_request_body clob;
l_request_body_length number;
l_http_response utl_http.resp;
l_response_header_name varchar2(256);
l_response_header_value varchar2(1024);
l_response_body varchar2(32767);
l_offset number := 1;
l_amount number := 2000;
l_buffer varchar2(2000);
begin
select my_file
into l_attachment
from my_files
where seq_nr = 1;
l_request_body := l_newline
|| '--' || lco_boundary || l_newline
|| 'Content-Disposition: form-data; name="key1"' || l_newline
|| l_newline
|| 'value1' || l_newline
|| '--' || lco_boundary || l_newline
|| 'Content-Disposition: form-data; name="key2"' || l_newline
|| l_newline
|| 'vaule2' || l_newline
|| '--' || lco_boundary || '--';
dbms_output.put_line('Request body>');
dbms_output.put_line(dbms_lob.substr(l_request_body, 4000, 1));
l_request_body_length := dbms_lob.getlength(l_request_body);
utl_http.set_wallet(
path => 'file:/path/to/wallet', --适用于 https
password => 'you set inital_secret_password'
);
l_http_request := utl_http.begin_request(
url => 'https:/webstie/api/token/',
method => 'POST',
http_version => 'HTTP/1.1'
);
utl_http.set_header(l_http_request, 'Content-Type', 'multipart/form-data; boundary="' || lco_boundary || '"');
utl_http.set_header(l_http_request, 'Content-Length', l_request_body_length);
while l_offset < l_request_body_length loop
dbms_lob.read(l_request_body, l_amount, l_offset, l_buffer);
utl_http.write_text(l_http_request, l_buffer);
l_offset := l_offset + l_amount;
end loop;
l_http_response := utl_http.get_response(l_http_request);
dbms_output.put_line('Response> Status Code: ' || l_http_response.status_code);
dbms_output.put_line('Response> Reason Phrase: ' || l_http_response.reason_phrase);
dbms_output.put_line('Response> HTTP Version: ' || l_http_response.http_version);
for i in 1 .. utl_http.get_header_count(l_http_response) loop
utl_http.get_header(l_http_response, i, l_response_header_name, l_response_header_value);
dbms_output.put_line('Response> ' || l_response_header_name || ': ' || l_response_header_value);
end loop;
utl_http.read_text(l_http_response, l_response_body, 32767);
dbms_output.put_line('Response body>');
dbms_output.put_line(l_response_body);
if l_http_request.private_hndl is not null then
utl_http.end_request(l_http_request);
end if;
if l_http_response.private_hndl is not null then
utl_http.end_response(l_http_response);
end if;
exception
when others then
if l_http_request.private_hndl is not null then
utl_http.end_request(l_http_request);
end if;
if l_http_response.private_hndl is not null then
utl_http.end_response(l_http_response);
end if;
raise;
end;
--- 刘轶鹤