Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Ví dụ về Oracle UTL_HTTP Post Multipart / Form-Data (JSON &ZIP)

Ở đây tôi đang đưa ra một ví dụ để gửi JSON và tệp Zip tới REST dịch vụ web sử dụng Oracle UTL_HTTP đăng nhiều phần / biểu mẫu-dữ liệu.

Ban đầu, tôi lấy mã ví dụ từ blog của Nick Buytaert và sau đó sửa đổi nó để kết hợp JSON và tệp Zip.

Gửi JSON và tệp Zip tới dịch vụ web REST bằng UTL_HTTP

Mã PL / SQL sau sẽ thực hiện REST xác thực dịch vụ web bằng Mã thông báo. Và sau đó, nó sẽ nhận được JSON và BLOB khỏi bảng. Nó sẽ Zip BLOB và sau đó kết hợp nó với JSON bằng cách chuyển đổi nó thành base64 nhập dữ liệu. Sau đó, nó sẽ chuẩn bị tiêu đề và gửi nó.

 statementl_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-- lấy tokenl_clob:=apex_web_service.make_rest_request (p_url => 'https:/ / YourTokenURL ', p_http_method =>' GET '); l_status:=apex_web_service.g_status_code; APEX_JSON.parse (l_clob); l_token:=APEX_JSON.get_varchar2 (p_path => 'token'); - chuẩn bị hoặc lấy jsonl_req_body:='{name:"Scott", tuổi:33, thành phố:"Huston"}'; l_request_body:=l_newline || '-' || lco_boundary || l_newline || 'Nội dung-Bố trí:biểu mẫu-dữ liệu; name ="contact-info" '|| l_newline || 'Content-Type:application / json' || l_newline || l_newline || l_req_body; - || l_newline-- || '-' || lco_boundary || '-'; - lấy đốm màu từ bảng và nén nó lại.; END LOOP; apex_zip.finish (p_zipped_blob => l_attachment); - ghép tệp zip dưới dạng dữ liệu base64 với jsonl_request_body ở trên:=l_request_body || l_newline || '-' || lco_boundary || l_newline || 'Nội dung-Bố trí:biểu mẫu-dữ liệu; name ="tệp đính kèm" '|| l_newline || 'Loại-Nội dung:ứng dụng / zip' || l_newline || 'Nội dung-Chuyển-Mã hoá:base64' || l_newline || l_newline || apex_web_service.blob2clobbase64 (l_attachment) || l_newline || '-' || lco_boundary || '-'; dbms_output.put_line ('Nội dung yêu cầu>'); dbms_output.put_line (dbms_lob.substr (l_request_body, 4000, 1)); l_request_body_length:=dbms_lob.getlength (l_request_body); - authenticate (ví tiền => 'file:/ your / wallet / path', password => 'YourWalletPsw'); - bắt đầu gửi 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', 'multiart / form-data; ranh giới ="'|| 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 (l_http_request, 'Connection', 'keep-lives'); - gửi dữ liệu theo từng đoạn trong khi l_offset  Mã trạng thái:' || l_http_response.status_code); dbms_output.put_line ('Câu trả lời> Cụm từ lý do:' || l_http_response.reason_phrase); dbms_output.put_line ('Phản hồi> Phiên bản HTTP:' || l_htt_head_response.http_version.get_head_response. 1. (l_http_response) looputl_http.get_header (l_http_response, tôi, l_response_header_name, l_response_header_value); dbms_output.put_line ('Phản hồi>' || l_response_header_name ||'read_head_lặp_với_dịch_tối_tiếng_text_revale7);; dbms_output.put_line ('Nội dung phản hồi>'); dbms_output.put_line (l_response_body); nếu l_http_request.private_hndl không phải là null thìutl_http.end_request (l_http_request); end if; if l_ever_ notrequest kết thúc nếu; ngoại lệ khi những người khác nhận được l_http_request.private_hndl không phải là null thìutl_http.end_request (l_http_request); kết thúc nếu; nếu l_http_response.private_hndl không null thìutl_http.end_response ende (lrespons> ende 

Mã này hoạt động giống như một sự quyến rũ. Vui lòng cho tôi biết trong phần bình luận nếu bạn có bất kỳ vấn đề nào.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình điều khiển Oracle thay thế cho .net

  2. Cài đặt Oracle Client từ dòng lệnh mà không cần người dùng tương tác

  3. Từ Thủ tục đã lưu, trả về tham số OUT &con trỏ OUT &kết quả phân tích cú pháp (Oracle)

  4. Oracle 12.2 Sharding

  5. Điền giá trị mục hiển thị trên truy vấn trong biểu mẫu Oracle