POST /Goods/ HTTP/1.1\r\n
Connection: Keep-Alive\r\n
Content-Type: multipart/form-data; boundary=onesboundarydelimiter\r\n
Accept: */*\r\n
Authorization: Basic {password_hash}\r\n
User-Agent: 1C+Enterprise/8.2\r\n
Content-Length: {content_length}\r\n
Host: api.somedomain.com\r\n
\r\n
--onesboundarydelimiter\r\n
Content-Disposition: form-data; name="file"; filename="{filename_with_xml}"\r\n
Content-Type: application/octet-stream\r\n
Content-Transfer-Encoding: binary\r\n
\r\n
<?xml version="1.0" encoding="UTF-8"?>\r\n
<Goods>
<records>
<record>
<fields>
<title>New goods</title>
<details>
<record>
<record>
<id>1853</id>
<fields>
<value>3600</value>
</fields>
</record>
</record>
</details>
<attachments>
<images>
<record>
<fields>
<href>{image url}</href>
</fields>
</record>
</images>
</attachments>
<order>12</order>
</fields>
</record>
</records>
</Goods>
--onesboundarydelimiter--
//ЗАДАЕМ НЕОБХОДИМЫЕ ПЕРЕМЕННЫЕ...
//а) Разделитель (Boundary) - может быть любая уникальная строка, будем считать что это GUID константы, она неизменная
Boundary = СтрЗаменить(Константы.ВалютаУправленческогоУчета.Получить().УникальныйИдентификатор(), "-", "");
//б) Размер файла отправки
ФайлОтправки = Новый Файл("C:\1c8\otpravka.xml");
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
//1. УСТАНАВЛИВАЕМ СОЕДИНЕНИЕ С СЕРВЕРОМ...
Сервер = "api.testm.mysite.ua";
ИмяПользователя = "demo";
Пароль = "mypassword";
Соединение = Новый HTTPСоединение(Сервер,,ИмяПользователя,Пароль);
//2. ФОРМИРУЕМ http-запрос СРЕДСТВАМИ 1С...
//а) заголовки
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+boundary);
Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки);
//б) сам запрос
Запрос = Новый HTTPЗапрос("/Goods",Заголовки);
Запрос.УстановитьИмяФайлаТела("C:\1c8\otpravka.xml");
//3. ОТПРАВЛЯЕМ ЗАПРОС НА СЕРВЕР МЕТОДОМ POST СРЕДСТВАМИ 1С...
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(ТекстОтвета);//выведем ответ от сервера в поле формы
--82a55a64fe9111de806e001d7da552f5
Content-Disposition: form-data; name="file"; filename="C:\otpravka.xml"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
<?xml version="1.0" encoding="UTF-8"?>
<Goods>
<records>
<record>
<fields>
<title>ACCESS, ACCESS TI2 Desktop hardware synthesizer, </title>
<parent>
<id>165360</id>
</parent>
<price>31104</price>
<producer>
<id/>
</producer>
<status>locked</status>
<sell_status>unavailable</sell_status>
<docket>ACCESS TI2 DESKTOP Синтезатор аналогового моделирования, настольно/рековый</docket>
<tags/>
<ext_id>204765</ext_id>
</fields>
</record>
</records>
</Goods>
--82a55a64fe9111de806e001d7da552f5--
<?xml version="1.0" encoding="UTF-8"?>
<Goods>
<records>
<record>
<fields>
<title>ACCESS, ACCESS TI2 Desktop hardware synthesizer, </title>
<parent>
<id>165360</id>
</parent>
<price>31104</price>
<producer>
<id/>
</producer>
<status>locked</status>
<sell_status>unavailable</sell_status>
<docket>ACCESS TI2 DESKTOP Синтезатор аналогового моделирования, настольно/рековый</docket>
<tags/>
<ext_id>204765</ext_id>
</fields>
</record>
</records>
</Goods>
ФайлДляПередачи = Новый ТекстовыйДокумент;
ФайлДляПередачи.Прочитать(имяФайлаОтправки, КодировкаТекста.ANSI);
HTTPЗапрос.УстановитьТелоИзСтроки(ФайлДляПередачи.ПолучитьТекст());
! | Правила, пункт 1 |
Boundary = СтрЗаменить(Константы.ВалютаРегламентированногоУчета.Получить().УникальныйИдентификатор(), "-", "");
//б) Размер файла отправки
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
//2. ФОРМИРУЕМ http-запрос СРЕДСТВАМИ 1С...
//а) заголовки
Заголовки = Новый Соответствие();
Заголовки.Вставить("POST /GOODS/ HTTP/1.1");
Заголовки.Вставить("Connection","Keep-Alive");
Заголовки.Вставить("Content-Type","multipart/form-data; boundary="+Boundary);
Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Authorization",СокрЛП(НастройкаСсылка.ЗаголовкиAuthorization));
Заголовки.Вставить("User-Agent", СокрЛП(НастройкаСсылка.ЗаголовкиUser));
Заголовки.Вставить("Content-Length", РазмерФайлаОтправки);
Заголовки.Вставить("Host",Соединение.Сервер);
ИмяФайлаЗапросHTTP = ПолучитьИмяВременногоФайла();
ЗапросHTTP = Новый ЗаписьТекста;
ЗапросHTTP.Открыть(ИмяФайлаЗапросHTTP, КодировкаТекста.ANSI);
ЗапросHTTP.ЗаписатьСтроку("--"+Boundary + Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=" + Символ(34) + ФайлОтправки.Имя + Символ(34) + Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку("Content-Type: application/octet-stream" + Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку("Content-Transfer-Encoding: binary" + Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку(Символы.ВК);
ФайлДляПередачи = Новый ТекстовыйДокумент;
ФайлДляПередачи.Прочитать(ФайлОтправки.ПолноеИмя, КодировкаТекста.ANSI);
ТекстСтрока = ФайлДляПередачи.ПолучитьТекст();
СимволыНачало = Найти(ТекстСтрока, "<?xml version=""1.0"" encoding=""UTF-8""?>");
СимволыНачало = Прав(ТекстСтрока, СтрДлина(ТекстСтрока) - СимволыНачало + 1);
ЗапросHTTP.ЗаписатьСтроку(СимволыНачало);
ЗапросHTTP.ЗаписатьСтроку(Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку("--"+Boundary+"--");
ЗапросHTTP.Закрыть();
ОтветСервера = Неопределено;
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
//б) сам запрос
Запрос = Новый HTTPЗапрос("/Goods",Заголовки);
Запрос.УстановитьИмяФайлаТела(ИмяФайлаЗапросHTTP);
Попытка
Соединение.ОтправитьДляОбработки(Запрос, ИмяФайлаОтвета);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
! | Выделяйте код |