Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przykład Oracle UTL_HTTP Post Multipart/Form-Data (JSON i ZIP)

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_offset  Kod 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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obsługa wielu języków w 11i/R12

  2. Funkcja SIN() w Oracle

  3. Jak poprawnie obsługiwać daty w ograniczeniach zapytań

  4. Czy istnieje najlepszy sposób na uniknięcie wykonywania procesu więcej niż raz w Oracle?

  5. Jak sprawić, by moja aplikacja Java identyfikowała się w Oracle podczas połączenia?