Имя: Пароль:
1C
 
Отправка файла .xml POST запросом
,
0 bvb
 
16.08.19
13:27
Просьба не глумится ибо звучит все конечно смешно
Сопрягаюсь с чудной WMS системой.
Работаю как водится ваще без ТЗ
Лимит времени естественно ограничен
В REST шарю на уровне общих понятий

Сформировал XML файл для отправки POST запросом
ПутьКФайлуXML = Новый Файл("test.xml");
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ПутьКФайлуXML.ПолноеИмя);

Имею URL :  http://192.168.20.12:7000/cwms/ws/NOM.DEV
Нужно отправить туда мой хмл и получить текст флеш-бек ответа для последующей обработки

Как это сделать с минимальными телодвижениями (без создания временного текстового файла, перекодировки в нем и т.п. ) ?

За образец имею :
Процедура ВыполнитьPOSTЗапрос(Команда, СсылкаНаРесурс)
    
    // Создаем новое HTTP соединение с указанием сервера
    // Последний параметр отвечает за использование защищенного соединения
    HTTP = Новый HTTPСоединение(ИмяСервера,,,,,Истина);
    
    // Получим временный файл для передачи в теле POST запроса
    ФайлТелаЗапроса = ПолучитьИмяВременногоФайла();
    
    // Запишем в файл содержимое тела запроса (текст)
    ТекстФайл = Новый ТекстовыйДокумент;
    ТекстФайл.УстановитьТекст(ФайлТелаЗапроса);
    ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.ANSI);
    
    // Получим размер данных для передачи в заголовок
    ФайлНаОтправку = Новый Файл(ФайлТелаЗапроса);
    РазмерФайлаНаОтправку = XMLСтрока(ФайлНаОтправку.Размер());
    
    // Получим временный файл — тело ответа POST запроса
    ФайлРезультат = ПолучитьИмяВременногоФайла();
    
    // Заголовок создадим в виде соответствия
    ЗаголовокЗапросаHTTP = Новый Соответствие();
    
    // Передаем в заголовках размер и тип данных на отправку
    ЗаголовокЗапросаHTTP.Вставить("Content-Length", РазмерФайлаНаОтправку);
    ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
    
    // Отсылаем POST запрос на обработку.
    // СсылкаНаРесурс — ссылка на веб-сервер (страницу), к которой посылается POST запрос
    HTTP.ОтправитьДляОбработки(ФайлТелаЗапроса, СсылкаНаРесурс, ФайлРезультат, ЗаголовокЗапросаHTTP);
    
    // Получим ответ
    ТекстовыйФайлОтвета = Новый ТекстовыйДокумент;
    ТекстовыйФайлОтвета.Прочитать(ФайлРезультат, КодировкаТекста.UTF8);
    СтрокаОтветаСервера = ТекстовыйФайлОтвета.ПолучитьТекст();
    
КонецПроцедуры
1 Garykom
 
гуру
16.08.19
13:34
(0) Не понял проблемы.
Если файл XML не большой то строку посылай внутри которой содержимое XML.
2 bvb
 
16.08.19
13:36
(1) В примере его перекодируют :

    ТекстФайл = Новый ТекстовыйДокумент;
    ТекстФайл.УстановитьТекст(ФайлТелаЗапроса);
    ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.ANSI);
3 dka80
 
16.08.19
13:37
УстановитьТелоИзСтроки
4 Garykom
 
гуру
16.08.19
13:50
(2) Могу продать СП, очень дорого.

ТекстовыйДокумент.УстановитьТекст("Блабла");
ТекстовыйДокумент.УстановитьТипФайла("UTF-8");
Текст = ТекстовыйДокумент.ПолучитьТекст();
5 bvb
 
16.08.19
14:13
(4) Я так понял там временный файл нужен для определения размера сообщения

Это критично ?
6 Garykom
 
гуру
16.08.19
14:34
(5) Эээ даже не знаем как длину строки глянуть?
7 bvb
 
16.08.19
14:41
(6) Я к тому что у меня может быть достаточно большой хмл.
Может в этом случае его действительно лучше класть в текстовик ?
8 Garykom
 
гуру
16.08.19
14:44
(7) Смотря для чего "лучше".
Очень большой xml и память может кончиться, зато быстрее без записи на диск и его ресурс не тратится.
9 bvb
 
16.08.19
15:21
(8) У меня вот пример - 70 метров

(6) Длина строки в символах а размер "Content-Length" в байтах - они совпадут ?
10 eklmn
 
гуру
16.08.19
15:28
мммм XML говоришь..."Content-Type", "application/json
11 Garykom
 
гуру
16.08.19
15:28
(10) Думаю все интереснее и там xml внутри json
12 Garykom
 
гуру
16.08.19
15:29
(9) >Длина строки в символах а размер "Content-Length" в байтах - они совпадут ?

Про кодировки бы узнать и длину в байтах каждого символа