Имя: Пароль:
1C
1С v8
Передача xml через HTTP-соединение.
,
0 Serdolik55
 
13.02.19
09:26
Всем привет!
Стоит задача сгенерировать и передать XML  на сервер и получить ответ об успешной(не успешной) загрузки/ обработки.
Процедуру генерации и отправки прилагаю ниже:

Процедура ВыгрузитьНаПортал ()Экспорт
    //Формирование файла отправки
    ИмяФайлаОтправки = ПолучитьИмяВременногоФайла();
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ИмяФайлаОтправки);
    //Тип данных
    ЗаписьXML.ЗаписатьНачалоЭлемента("SetStockRequest"); //Начало SetStockRequest
    //шапка файла
    //Сегмент заголовка: 1 (Обязательный)
    ЗаписьXML.ЗаписатьНачалоЭлемента("Header"); //Начало Header
    //Уникальный номер сообщения поставщика
    ЗаписьXML.ЗаписатьНачалоЭлемента("message_id");
    ЗаписьXML.ЗаписатьТекст("7180073272");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //GLN ID поставщика
    ЗаписьXML.ЗаписатьНачалоЭлемента("glnid");
    ЗаписьXML.ЗаписатьТекст("54321");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //Тип загрузки данных: D - полный срез, U – update по определенным товарам Header
    ЗаписьXML.ЗаписатьНачалоЭлемента("load_type");
    ЗаписьXML.ЗаписатьТекст("D");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //reserve1
    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve1");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //reserve2
    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve2");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Конец Header
    //многострочная часть файла
    //Данные товаров:  0..unbounded
    ЗаписьXML.ЗаписатьНачалоЭлемента("Item"); //Начало Item
    //Код товара
    ЗаписьXML.ЗаписатьНачалоЭлемента("material");
    ЗаписьXML.ЗаписатьТекст("4058223201");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //Кол-во доступного товара, (не включает зарезервированный товар под заказы)
    ЗаписьXML.ЗаписатьНачалоЭлемента("quantity");
    ЗаписьXML.ЗаписатьТекст("124");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //Единица измерения по ISO
    ЗаписьXML.ЗаписатьНачалоЭлемента("unit");
    ЗаписьXML.ЗаписатьТекст("ST");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //Количество дней до поставки на склад
    ЗаписьXML.ЗаписатьНачалоЭлемента("days_to_delivery");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //Минимальное количество заказа
    ЗаписьXML.ЗаписатьНачалоЭлемента("min_order");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //Кратность заказа
    ЗаписьXML.ЗаписатьНачалоЭлемента("multiplicity");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    //Резервное поле в позициях
    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve3");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Конец Item
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Конец SetStockRequest
    
ЗаписьXML.Закрыть();
    
    //Формирование файла ответа
    ИмяВыходногоФайла = ПолучитьИмяВременногоФайла();
    
    HTTPСоединение = Новый HTTPСоединение("rut123.ru", 245, "user",  "123",  ,);
    
    // Отправим запрос на сервер, и получим ответ
    Попытка
        
        HTTPСоединение.ОтправитьДляОбработки(имяФайлаОтправки, "/Folder/Fold/Fol", ИмяВыходногоФайла);
        
        Файл = новый ЧтениеТекста();
        Файл.Открыть(ИмяВыходногоФайла, КодировкаТекста.UTF8);
        Ответ = Файл.Прочитать();
        
        Сообщить("Ответ = " + Ответ);
        
        Файл.Закрыть();
        
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

При выполнении процедуры выскакивает ошибка:
Ошибка при выполнении файловой операции  '"/Folder/Fold/Fol ': Ошибка работы с Интернет:  внутренняя ошибка сервера (500). <html><head><title>Error</title></head>
<body><h1>Error</h1><pre>
Error while sending message to module processor: Sender Channel 'REST_Sender_Supplier' (ID: 5f77e4bba8cb3159abefbac0004505be): Catching exception calling messaging system: Unable to parse XML message payload to extract operation for receiver determinationorg.xml.sax.SAXParseException: Content is not allowed in prolog.
</pre></body></html>
: Ошибка работы с Интернет:  внутренняя ошибка сервера (500)

По отладке ошибка вываливается на HTTPСоединение.ОтправитьДляОбработки(имяФайлаОтправки, "/Folder/Fold/Fol", ИмяВыходногоФайла);

Кто-нибудь знает в каком месте копать?
1 ДенисЧ
 
13.02.19
09:34
НАверное, неправильный xml формируешь.
Возьми у авторов сервера пример правильного и сравни со своим.
2 Serdolik55
 
13.02.19
09:37
(1) xml формирую правильно, проверил выполнение POST-запроса XML через POSTман - выполнено успешно. Ошибка видимо при передачи xml, либо при подготовки xml
3 ДенисЧ
 
13.02.19
09:41
(2) "Content is not allowed in prolog"
Сервер говорит, что у тебя xml неправильный. В тырнете много рекомендаций по этому поводу.
Покажи свой пример, который ты из 1с отправляешь
4 Serdolik55
 
13.02.19
09:46
(3) Сохранил xml в файл:
<SetStockRequest>
    <Header>
        <message_id>7180073272</message_id>
        <glnid>54321</glnid>
        <load_type>D</load_type>
        <reserve1> </reserve1>
        <reserve2> </reserve2>
    </Header>
    <Item>
        <material>4058223201</material>
        <quantity>124</quantity>
        <unit>ST</unit>
        <days_to_delivery>1</days_to_delivery>
        <min_order>1</min_order>
        <multiplicity>1</multiplicity>
        <reserve3> </reserve3>
    </Item>
</SetStockRequest>
5 ДенисЧ
 
13.02.19
09:57
(4) Если ты думаешь, что это wel-formed xml, то ты сильно заблуждаешься.
6 Serdolik55
 
13.02.19
10:00
(5) Подскажи, что тогда не так в этом xml?
7 ДенисЧ
 
13.02.19
10:02
(6) Как минимум заголовка нет.

Добавь после    
ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ЗаписатьОбъявлениеXML()
8 polosov
 
13.02.19
10:15
(0) Ты пытаешься передавать файл в запросе, но не строишь правильно тело согласно RFC. Гугли "отправить файл из 1с методом post" и первая ссылка на сайт-который-нельзя-называть.
Тебе нужно правильно подготовить тело запроса.
9 polosov
 
13.02.19
10:21
+(8)  Дело в том, что принимающий сервер воспринимает твой  XML как запрос и пытается парсить, что приводит к ошибке. Тебе нужно выделить файл в запросе специальными заголовками и boundary, чтобы сервер понял, что ты ему положил.
10 Serdolik55
 
13.02.19
10:34
(9) Спасибо, статью нашёл сейчас попробую переписать процедуру. Напишу о результате.
11 Вафель
 
13.02.19
10:40
может дело в BOM ?
12 Serdolik55
 
13.02.19
14:54
(9) Поменял процедуру в соответствии со статьей, всё равно таже ошибка:
Процедура ВыгрузитьНаПортал()
//Подготовка переменных
    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
    //Определяем имя файла ответа от веб-сервера.
    ФайлОтвета =ПолучитьИмяВременногоФайла("xml");

    //Формирование файла отправки
    ФайлXML = ПолучитьИмяВременногоФайла("xml");
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ФайлXML);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    //Тип данных
    ЗаписьXML.ЗаписатьНачалоЭлемента("SetStockRequest"); //Начало SetStockRequest
    
    //шапка файла
    //Сегмент заголовка: 1 (Обязательный)
    ЗаписьXML.ЗаписатьНачалоЭлемента("Header"); //Начало Header
    //Уникальный номер сообщения поставщика
    ЗаписьXML.ЗаписатьНачалоЭлемента("message_id");
    ЗаписьXML.ЗаписатьТекст("7180073272");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //GLN ID поставщика
    ЗаписьXML.ЗаписатьНачалоЭлемента("glnid");
    ЗаписьXML.ЗаписатьТекст("54321");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Тип загрузки данных: D - полный срез, U – update по определенным товарам Header
    ЗаписьXML.ЗаписатьНачалоЭлемента("load_type");
    ЗаписьXML.ЗаписатьТекст("D");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //reserve1
    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve1");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //reserve2
    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve2");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Конец Header
    
    //многострочная часть файла
    //Данные товаров:  0..unbounded
    ЗаписьXML.ЗаписатьНачалоЭлемента("Item"); //Начало Item
    //Код товара
    ЗаписьXML.ЗаписатьНачалоЭлемента("material");
    ЗаписьXML.ЗаписатьТекст("4058223201");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Кол-во доступного товара, (не включает зарезервированный товар под заказы )
    ЗаписьXML.ЗаписатьНачалоЭлемента("quantity");
    ЗаписьXML.ЗаписатьТекст("124");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Единица измерения по ISO
    ЗаписьXML.ЗаписатьНачалоЭлемента("unit");
    ЗаписьXML.ЗаписатьТекст("ST");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Количество дней до поставки на склад
    ЗаписьXML.ЗаписатьНачалоЭлемента("days_to_delivery");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Минимальное количество заказа
    ЗаписьXML.ЗаписатьНачалоЭлемента("min_order");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Кратность заказа
    ЗаписьXML.ЗаписатьНачалоЭлемента("multiplicity");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Резервное поле в позициях
    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve3");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Конец Item
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Конец SetStockRequest
    
    ЗаписьXML.Закрыть();

    ИмяФайлаЗагрузки = "Post.xml";
    ФайлЗагрузки = КаталогВременныхФайлов() + ИмяФайлаЗагрузки;
    
    ИмяФайлаОтправкиДляОбъединения = ПолучитьИмяВременногоФайла("xml");
    ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаОтправкиДляОбъединения, КодировкаТекста.UTF8, Символы.ПС, Ложь );
    ЗаписьТекста.ЗаписатьСтроку("--" + Boundary);
    ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""datafile""; filename=""" + ИмяФайлаЗагрузки + """");
    ЗаписьТекста.ЗаписатьСтроку("Content-type", "application/xml");
    ЗаписьТекста.ЗаписатьСтроку("");
    ЗаписьТекста.Закрыть();
    
    МассивФайловДляОбъединения = Новый Массив;
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиДляОбъединения);
    МассивФайловДляОбъединения.Добавить(ФайлXML);

    ОбъединитьФайлы(МассивФайловДляОбъединения, ФайлЗагрузки);
    
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
    ФайлОтправки = Новый Файл(ФайлЗагрузки);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
       
    
    HTTPСоединение = Новый HTTPСоединение("rut123.ru", 245, "user",  "123",  ,);
    
    // Отправим запрос на сервер, и получим ответ
    Попытка
        
        HTTPСоединение.ОтправитьДляОбработки(ФайлЗагрузки, "/Folder/Fold/Fol", ФайлОтвета, ЗаголовокHTTP);
        
        Файл = новый ЧтениеТекста();
        Файл.Открыть(ФайлОтвета, КодировкаТекста.UTF8);
        Ответ = Файл.Прочитать();
        Сообщить("Ответ = " + Ответ);
        Файл.Закрыть();
        
    Исключение
        #Если Клиент Тогда
            Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
        #Иначе
            ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
        #КонецЕсли
        Возврат;     
    КонецПопытки;
    
КонецПроцедуры

Файл формируется вот такой:
--b100f3ffa127466198cd1a873891647c
Content-Disposition: form-data; name="datafile"; filename="Post.xml"
Content-typeapplication/xml
<?xml version="1.0" encoding="UTF-8"?>
<SetStockRequest>
    <Header>
        <message_id>7180073272</message_id>
        <glnid>54321</glnid>
        <load_type>D</load_type>
        <reserve1> </reserve1>
        <reserve2> </reserve2>
    </Header>
    <Item>
        <material>4058223201</material>
        <quantity>124</quantity>
        <unit>ST</unit>
        <days_to_delivery>1</days_to_delivery>
        <min_order>1</min_order>
        <multiplicity>1</multiplicity>
        <reserve3> </reserve3>
    </Item>
</SetStockRequest>

Ошибка: Error while sending message to module processor: Sender Channel 'REST_Sender_Supplier' (ID: 5f77e4bba8cb3159abefbac0004505be): Catching exception calling messaging system: Unable to parse XML message payload to extract operation for receiver determinationorg.xml.sax.SAXParseException: Content is not allowed in prolog.
</pre></body></html>
: Ошибка работы с Интернет:  внутренняя ошибка сервера (500)
13 polosov
 
13.02.19
15:08
(12) Должен быть завершающий boundary в файле
--boundary--
14 polosov
 
13.02.19
15:10
(12) Не правильный Content-typeapplication/xml
Двоеточие забыл.
15 Вафель
 
13.02.19
15:12
(13) это ты про мултипарт говоришь.
Если один файл, то никаких разделителей не нужно
16 polosov
 
13.02.19
15:23
(15) У него и есть мультипарт
https://tools.ietf.org/html/rfc1867
Во всяком случае, делал так - работает.
17 Serdolik55
 
13.02.19
15:37
Поправил, но все равно таже ошибка:

Процедура ВыгрузитьНаПортал()
//Подготовка переменных

    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
    //Определяем имя файла ответа от веб-сервера.

    ФайлОтвета =ПолучитьИмяВременногоФайла("xml");

    //Формирование файла отправки

    ФайлXML = ПолучитьИмяВременногоФайла("xml");
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ФайлXML);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    //Тип данных

    ЗаписьXML.ЗаписатьНачалоЭлемента("SetStockRequest");//Начало SetStockRequest

    
    //шапка файла

    //Сегмент заголовка: 1 (Обязательный)

    ЗаписьXML.ЗаписатьНачалоЭлемента("Header");//Начало Header

    //Уникальный номер сообщения поставщика

    ЗаписьXML.ЗаписатьНачалоЭлемента("message_id");
    ЗаписьXML.ЗаписатьТекст("7180073272");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //GLN ID поставщика

    ЗаписьXML.ЗаписатьНачалоЭлемента("glnid");
    ЗаписьXML.ЗаписатьТекст("54321");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Тип загрузки данных: D - полный срез, U – update по определенным товарам Header

    ЗаписьXML.ЗаписатьНачалоЭлемента("load_type");
    ЗаписьXML.ЗаписатьТекст("D");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //reserve1

    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve1");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //reserve2

    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve2");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.ЗаписатьКонецЭлемента();//Конец Header

    
    //многострочная часть файла

    //Данные товаров:  0..unbounded

    ЗаписьXML.ЗаписатьНачалоЭлемента("Item");//Начало Item

    //Код товара

    ЗаписьXML.ЗаписатьНачалоЭлемента("material");
    ЗаписьXML.ЗаписатьТекст("4058223201");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Кол-во доступного товара, (не включает зарезервированный товар под заказы )

    ЗаписьXML.ЗаписатьНачалоЭлемента("quantity");
    ЗаписьXML.ЗаписатьТекст("124");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Единица измерения по ISO

    ЗаписьXML.ЗаписатьНачалоЭлемента("unit");
    ЗаписьXML.ЗаписатьТекст("ST");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Количество дней до поставки на склад

    ЗаписьXML.ЗаписатьНачалоЭлемента("days_to_delivery");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Минимальное количество заказа

    ЗаписьXML.ЗаписатьНачалоЭлемента("min_order");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Кратность заказа

    ЗаписьXML.ЗаписатьНачалоЭлемента("multiplicity");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Резервное поле в позициях

    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve3");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.ЗаписатьКонецЭлемента();//Конец Item

    
    ЗаписьXML.ЗаписатьКонецЭлемента();//Конец SetStockRequest

    
    ЗаписьXML.Закрыть();

    ИмяФайлаЗагрузки = "Post.xml";
    ФайлЗагрузки = КаталогВременныхФайлов() + ИмяФайлаЗагрузки;
    
    ИмяФайлаОтправкиДляОбъединения = ПолучитьИмяВременногоФайла("xml");
    ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаОтправкиДляОбъединения, КодировкаТекста.UTF8, Символы.ПС, Ложь );
    ЗаписьТекста.ЗаписатьСтроку("--" + Boundary);
    ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""datafile""; filename=""" + ИмяФайлаЗагрузки + """");
    ЗаписьТекста.ЗаписатьСтроку("Content-type:", "application/xml");
    ЗаписьТекста.ЗаписатьСтроку("--" + Boundary);
    ЗаписьТекста.Закрыть();
    
    МассивФайловДляОбъединения = Новый Массив;
     МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиДляОбъединения);
    МассивФайловДляОбъединения.Добавить(ФайлXML);

    ОбъединитьФайлы(МассивФайловДляОбъединения, ФайлЗагрузки);
    
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
    ФайлОтправки = Новый Файл(ФайлЗагрузки);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
      
    
    HTTPСоединение = Новый HTTPСоединение("rut123.ru", 245, "user",  "123",  ,);
    
    // Отправим запрос на сервер, и получим ответ

    Попытка
        
        HTTPСоединение.ОтправитьДляОбработки(ФайлЗагрузки, "/Folder/Fold/Fol", ФайлОтвета, ЗаголовокHTTP);
        
        Файл = новый ЧтениеТекста();
        Файл.Открыть(ФайлОтвета, КодировкаТекста.UTF8);
        Ответ = Файл.Прочитать();
        Сообщить("Ответ = " + Ответ);
        Файл.Закрыть();
        
    Исключение
        #Если Клиент Тогда

            Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
        #Иначе

            ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
        #КонецЕсли

        Возврат;    
    КонецПопытки;
    
КонецПроцедуры

сам xml вот:
--0ae29bee7bd943a192c1bd7d213ba72f
Content-Disposition: form-data; name="datafile"; filename="Post.xml"
Content-type:application/xml--0ae29bee7bd943a192c1bd7d213ba72f
<?xml version="1.0" encoding="UTF-8"?>
<SetStockRequest>
    <Header>
        <message_id>7180073272</message_id>
        <glnid>54321</glnid>
        <load_type>D</load_type>
        <reserve1> </reserve1>
        <reserve2> </reserve2>
    </Header>
    <Item>
        <material>4058223201</material>
        <quantity>124</quantity>
        <unit>ST</unit>
        <days_to_delivery>1</days_to_delivery>
        <min_order>1</min_order>
        <multiplicity>1</multiplicity>
        <reserve3> </reserve3>
    </Item>
</SetStockRequest>

Самое интересное, что я пробую запустить запрос в SoapUI 5.4.0 с заголовками - выполняеться с ошибкой, а чистый xml - выполняется успешно. Вот ссылка на скрин: https://ibb.co/mcQx1tp
18 polosov
 
13.02.19
15:55
(17) Отправляй файл CURL'ом. Ставь Fiddler для перехвата того, что отправляется. Запускай Curl с ключом  -x 127.0.0.1:8888, чтобы Fiddler мог перехватить данные. Смотри как будет выглядеть запрос, сделай его таким же. Внимательно смотри где буду символы CR+LF, чтобы сделать также.
19 Вафель
 
13.02.19
15:56
Точно не БОМ?
20 polosov
 
13.02.19
16:04
Ну и для успокоения сохраняй файл для отправки в кодировке "CESU-8" - это UTF-8 без БОМ
21 Вафель
 
13.02.19
16:11
(20) сейчас есть спец параметр для этого
22 Serdolik55
 
13.02.19
17:01
(18) Попробовали проверить запрос по сети. Запустили правильный запрос через SOUP он выполнился успешно, вот сам запрос: https://ibb.co/0Y5RhgH
И перехватили запрос, который генерит обработка из 1С с ошибкой: https://ibb.co/nC1Cq0k
Перед выполнением xml стоят три точки. Что это значит. Из кода убрал объявление заголовков пока.
23 ДенисЧ
 
13.02.19
17:04
(22) Похоже таки на BOM
24 Serdolik55
 
13.02.19
17:23
(23) Просвяти, что такое BOM? и как поправить?
25 Вафель
 
13.02.19
17:24
ByteOrderMark
26 Вафель
 
13.02.19
17:25
ЗаписьXML.ОткрытьФайл (XMLWriter.OpenFile)
ЗаписьXML (XMLWriter)
ОткрытьФайл (OpenFile)
Вариант синтаксиса: По имени и типу кодировки
Синтаксис:
ОткрытьФайл(<ИмяФайлаXML>, <ТипКодировки>, <ДобавлятьBOM>)
27 Serdolik55
 
13.02.19
17:33
(26) Я понял, что с кодировкой связано, но не пойму в какое место е себе в обработку это добавить?
Вот код процедуры:

Процедура ВыгрузитьНаПортал()
//Подготовка переменных


    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
    //Определяем имя файла ответа от веб-сервера.


    ФайлОтвета =ПолучитьИмяВременногоФайла("xml");

    //Формирование файла отправки


    ФайлXML = ПолучитьИмяВременногоФайла("xml");
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ФайлXML);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    //Тип данных


    ЗаписьXML.ЗаписатьНачалоЭлемента("SetStockRequest")//Начало SetStockRequest


    
    //шапка файла


    //Сегмент заголовка: 1 (Обязательный)


    ЗаписьXML.ЗаписатьНачалоЭлемента("Header")//Начало Header


    //Уникальный номер сообщения поставщика


    ЗаписьXML.ЗаписатьНачалоЭлемента("message_id");
    ЗаписьXML.ЗаписатьТекст("7180073272");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //GLN ID поставщика


    ЗаписьXML.ЗаписатьНачалоЭлемента("glnid");
    ЗаписьXML.ЗаписатьТекст("54321");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Тип загрузки данных: D - полный срез, U – update по определенным товарам Header


    ЗаписьXML.ЗаписатьНачалоЭлемента("load_type");
    ЗаписьXML.ЗаписатьТекст("D");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //reserve1


    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve1");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //reserve2


    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve2");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.ЗаписатьКонецЭлемента()//Конец Header


    
    //многострочная часть файла


    //Данные товаров:  0..unbounded


    ЗаписьXML.ЗаписатьНачалоЭлемента("Item")//Начало Item


    //Код товара


    ЗаписьXML.ЗаписатьНачалоЭлемента("material");
    ЗаписьXML.ЗаписатьТекст("4058223201");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Кол-во доступного товара, (не включает зарезервированный товар под заказы )


    ЗаписьXML.ЗаписатьНачалоЭлемента("quantity");
    ЗаписьXML.ЗаписатьТекст("124");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Единица измерения по ISO


    ЗаписьXML.ЗаписатьНачалоЭлемента("unit");
    ЗаписьXML.ЗаписатьТекст("ST");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Количество дней до поставки на склад


    ЗаписьXML.ЗаписатьНачалоЭлемента("days_to_delivery");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Минимальное количество заказа


    ЗаписьXML.ЗаписатьНачалоЭлемента("min_order");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Кратность заказа


    ЗаписьXML.ЗаписатьНачалоЭлемента("multiplicity");
    ЗаписьXML.ЗаписатьТекст("1");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    //Резервное поле в позициях


    ЗаписьXML.ЗаписатьНачалоЭлемента("reserve3");
    ЗаписьXML.ЗаписатьТекст(" ");
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.ЗаписатьКонецЭлемента()//Конец Item


    
    ЗаписьXML.ЗаписатьКонецЭлемента()//Конец SetStockRequest


    
    ЗаписьXML.Закрыть();

    ИмяФайлаЗагрузки = "Post.xml";
    ФайлЗагрузки = КаталогВременныхФайлов() + ИмяФайлаЗагрузки;
    
    ИмяФайлаОтправкиДляОбъединения = ПолучитьИмяВременногоФайла("xml");
    ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаОтправкиДляОбъединения, КодировкаТекста.UTF8, Символы.ПС, Ложь );
    ЗаписьТекста.ЗаписатьСтроку("--" + Boundary);
    ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""datafile""; filename=""" + ИмяФайлаЗагрузки + """");
    ЗаписьТекста.ЗаписатьСтроку("Content-type:", "application/xml");
    ЗаписьТекста.ЗаписатьСтроку("--" + Boundary);
    ЗаписьТекста.Закрыть();
    
    МассивФайловДляОбъединения = Новый Массив;
     МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиДляОбъединения);
    МассивФайловДляОбъединения.Добавить(ФайлXML);

    ОбъединитьФайлы(МассивФайловДляОбъединения, ФайлЗагрузки);
    
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
    ФайлОтправки = Новый Файл(ФайлЗагрузки);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
      
    
    HTTPСоединение = Новый HTTPСоединение("rut123.ru", 245, "user",  "123",  ,);
    
    // Отправим запрос на сервер, и получим ответ


    Попытка
        
        HTTPСоединение.ОтправитьДляОбработки(ФайлЗагрузки, "/Folder/Fold/Fol", ФайлОтвета, ЗаголовокHTTP);
        
        Файл = новый ЧтениеТекста();
        Файл.Открыть(ФайлОтвета, КодировкаТекста.UTF8);
        Ответ = Файл.Прочитать();
        Сообщить("Ответ = " + Ответ);
        Файл.Закрыть();
        
    Исключение
        #Если Клиент Тогда


            Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
        #Иначе


            ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
        #КонецЕсли


        Возврат;    
    КонецПопытки;
    
КонецПроцедуры
28 Serdolik55
 
14.02.19
09:50
(26) У меня платформа 8.2, и нет параметра ДобавитьBOM в методе ОткрытьФайл().
Попробовал на 8.3 с этим параметром, не помогло, та же ошибка