powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Отправить файл по SOAP-протоколу с помощью UTL_HTTP
5 сообщений из 5, страница 1 из 1
Отправить файл по SOAP-протоколу с помощью UTL_HTTP
    #39755549
sam_sql.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,

Стоит задача отправить на веб-сервис файл по SOAP протоколу для его проверки и вернуть результат этой проверки.
Если без файлов - то обращение к веб-сервисам я уже делал с помощью UTL_HTTP - код см. ниже. Но там не было файлов.
Как можно передать в этой процедуре приаттаченный файл? Или нужно использовать другой подход?

Примечание: пробовал отправлять файл на этот сервис с помощью SoapUI 5.4.0 - работает, но там по логам не совсем понятно, как формируется текст запроса с приаттаченным файлом.

Заранее спасибо!

Код: plsql
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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
function check_files
  return clob
is
  c_url            constant  varchar2(32767) := 'https://check.our.files.com';
  v_http_request   utl_http.req;
  v_http_response  utl_http.resp;
  
  v_buffer_size    number(3) := 512;
  v_soap_request   varchar2(32000);
  v_soap_response  clob;
  v_text_data      varchar2(32000);
  v_result         clob;
begin
  v_soap_request := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
                     <soapenv:Header/>
                     <soapenv:Body/>
                     </soapenv:Envelope>';

  dbms_output.put_line('----------request-------------------');
  
  utl_http.set_wallet('file:d:\folder','xxx');
  v_http_request := utl_http.begin_request(url => c_url, method => 'POST', http_version => 'HTTP/1.1');

  utl_http.set_header(v_http_request, 'Connection', 'close'); 
  utl_http.set_header(v_http_request, 'Content-Type', 'text/xml;charset=Windows-1251');
  utl_http.set_header(v_http_request, 'Content-Length', length(v_soap_request));
  utl_http.write_text(v_http_request, v_soap_request);

  dbms_output.put_line('----------response-------------------');

  v_http_response := utl_http.get_response(v_http_request);

  begin
    dbms_lob.createtemporary(lob_loc => v_soap_response, cache => false);

    loop
      utl_http.read_text(v_http_response, v_text_data, v_buffer_size);

      dbms_lob.writeappend(v_soap_response, length(v_text_data), v_text_data);

      dbms_output.put_line(v_text_data);
    end loop;

  exception when utl_http.end_of_body then
    utl_http.end_response(v_http_response);
  end;

  dbms_output.put_line('----------end_response----------------');

  v_result := substr(v_soap_response, instr(v_soap_response, '<soap:Body>'), instr(v_soap_response, '</soap:Body>')-(instr(v_soap_response, '<soap:Body>')-12));

  if v_http_request.private_hndl is not null then
    utl_http.end_request(v_http_request);
  end if;

  if v_http_response.private_hndl is not null then
    utl_http.end_response(v_http_response);
  end if;

  return v_result;
end;
...
Рейтинг: 0 / 0
Отправить файл по SOAP-протоколу с помощью UTL_HTTP
    #39755587
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отправить файл по SOAP-протоколу с помощью UTL_HTTP
    #39755728
sam_sql.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stdio https://www.w3.org/TR/soap12-mtom/

https://www.w3.org/TR/SOAP-attachments

не благодари

stdio,

Да вот, не могу понять как в переменную v_soap_request (в моей процедуре выше) засунуть все эти заголовки (Content-Type и т.д) для вложений:

Сервер видимо ожидает только XML,
а я ему еще пытаюсь передать строки типа: --MIME_boundary

В итоге получаю ошибки наподобие:

<returnederror>illegal character '-' at offset 234 of https://171.1.1.111:1990</returnederror>


пытался выполнить из доки:
Код: xml
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.
MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml;
        start="<claim061400a.xml@claiming-it.com>;"
Content-Description: This is the optional message description.

--MIME_boundary
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <claim061400a.xml@claiming-it.com>;

<?xml version='1.0' ?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
..
<theSignedForm href="cid:claim061400a.tiff@claiming-it.com"/>
..
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

--MIME_boundary
Content-Type: image/tiff
Content-Transfer-Encoding: binary
Content-ID: <claim061400a.tiff@claiming-it.com>;

...binary TIFF image...
--MIME_boundary--
...
Рейтинг: 0 / 0
Отправить файл по SOAP-протоколу с помощью UTL_HTTP
    #39755854
А если из SoapUI отловить пакет каким нибудь прокси наподобие Fiddler.
...
Рейтинг: 0 / 0
Отправить файл по SOAP-протоколу с помощью UTL_HTTP
    #39837419
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, sam_sql.ru !
Хотел узнать, получилось ли написать процедуру для отсылки SOAP-запроса с вложением MTOM?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Отправить файл по SOAP-протоколу с помощью UTL_HTTP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]