|
Передача 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 с этим параметром, не помогло, та же ошибка |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |