Tutaj podaję przykład wysyłania JSON i pliku Zip do REST
usługa sieciowa przy użyciu Oracle UTL_HTTP
opublikuj dane wieloczęściowe/formularza.
Początkowo wziąłem przykładowy kod z bloga Nicka Buytaerta, a następnie zmodyfikowałem go, aby zawierał JSON
i plik Zip.
Wyślij JSON i plik ZIP do usługi internetowej REST za pomocą UTL_HTTP
Poniższy kod PL/SQL wykona REST
uwierzytelnianie usług internetowych za pomocą Tokena. A potem otrzyma JSON
i BLOB z tabeli. Spakuje BLOB
a następnie połącz go z JSON
konwertując go na base64
wpisz dane. Następnie przygotuje nagłówek i wyśle go.
declarel_attachment blob;l_newline varchar2(50) :=chr(13) || chr(10);lco_boundary constant varchar2(30) :='gc0p4Jq0M2Yt08jU534c0p';l_http_request utl_http.req;l_request_body clob;l_request_body_length number;l_req_body clob;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);l_clob clob;l_token varchar2(32767));begin - pobierz tokenl_clob :=apex_web_service.make_rest_request( p_url/> 'https::/TwójTokenURL', p_http_method => 'POBIERZ'); l_status :=apex_web_service.g_status_code;APEX_JSON.parse(l_clob);l_token:=APEX_JSON.get_varchar2(p_path => 'token'); -- przygotuj lub pobierz jsonl_req_body :='{name:"Scott", wiek:33, miasto:"Huston"}';l_request_body :=l_newline|| '--' || lco_boundary || l_nowa linia|| „Dyspozycja treści:dane formularza; name="informacje-kontaktowe"' || l_nowa linia|| „Typ treści:application/json” || l_nowa linia|| l_nowa linia|| l_req_body; --|| l_nowa linia--|| '--' || lco_boundary || '--';-- pobierz obiekt blob z tabeli i skompresuj go FOR l_file IN (SELECTfile_name,my_file_blobFROMmy_doc_tableWHEREdoc_id ='1234') LOOPapex_zip.add_file(p_zipped_blob => l_attachment, p_file_name => l_file_.file_name>;END LOOP;apex_zip.finish(p_zipped_blob => l_attachment);-- połącz plik zip jako dane base64 z powyższym jsonl_request_body :=l_request_body || l_nowa linia|| '--' || lco_boundary || l_nowa linia|| „Dyspozycja treści:dane formularza; name="załącznik"' || l_nowa linia|| „Typ treści:aplikacja/zip” || l_nowa linia|| „Kodowanie-przesyłania treści:base64” || l_nowa linia|| l_nowa linia|| apex_web_service.blob2clobbase64(l_attachment) || l_nowa linia|| '--' || lco_boundary || '--';dbms_output.put_line('Treść żądania>');dbms_output.put_line(dbms_lob.substr(l_request_body, 4000, 1));l_request_body_length :=dbms_lob.getlength(l_request_body);-- uwierzytelnianie walletutl_wallet (ścieżka_http.set_ => 'file:/your/wallet/path',password => 'YourWalletPsw');-- zacznij wysyłać datal_http_request :=utl_http.begin_request(url => 'https://yourRESTservicePostURL',method => 'POST' ,http_version => 'HTTP/1.1');-- set headerutl_http.set_header(l_http_request, 'Authorization', 'Bearer' || l_token);utl_http.set_header(l_http_request, 'Content-Type', 'multipart/form-data;border="' || lco_boundary || ''"');utl_http.set_header(l_http_request, 'Content-Length', l_request_body_length);utl_http.set_header(l_http_request, 'Transfer-Encoding', 'Chunked');utl_http.set_ (l_http_request, 'Connection', 'keep-alive');-- wysyłaj dane porcjami, podczas gdy l_offsetKod statusu:' || l_http_response.status_code);dbms_output.put_line('Odpowiedź> Powód:' || l_http_response.reason_phrase);dbms_output.put_line('Odpowiedź> Wersja HTTP:' || l_http_response.http_version);dla i w 1 .get .. (l_http_odpowiedź) looputl_http.get_header(l_http_odpowiedź, i, l_response_nazwa_nagłówka, l_odpowiedź_wartość_nagłówka);dbms_output.put_line('Odpowiedź> ' || l_odpowiedź_nazwa_nagłówka_odpowiedzi || ':l_wartość,_.;dbms_output.put_line('Treść odpowiedzi>');dbms_output.put_line(l_response_body);jeśli l_http_request.private_hndl nie ma wartości null thenutl_http.end_request(l_http_request);end if;if;if l_http_response.private_nullepon_hndl nie ma wartości null; end if; wyjątekgdy inni wtedy if l_http_request.private_hndl nie ma wartości null thenutl_http.end_request(l_http_request);end if;if l_http_response.private_hndl nie ma wartości null thenutl_http.end_response(l_http_response);end if; Ten kod działa jak urok. Daj mi znać w sekcji komentarzy, jeśli masz jakiekolwiek problemy.