Передача файлов и данных на веб-сервер средствами 1С:Предприятие 8.X методом POST

0. Сергей Ожерельев (Поручик) 3624 16.05.09 15:53 Сейчас в теме
В данной статье собран мой опыт по передаче данных на веб-сервер.

В ходе реализации одного проекта потребовалось организовать автоматическую передачу данных на веб-сервер посредством регламентного задания.
Покопавшись прежде всего в мануалах, синтаксис-помощнике 1С Предприятия, порыскав в Сети, я с удивлением обнаружил наличие отсутствия каких-либо вменяемых материалов по теме. Вернее, материалы в Сети есть, но там больше вопросы с абстрактными ответами.

Перейти к публикации

Комментарии
1. Доржи Цыденов (support) 4527 16.05.09 15:53 Сейчас в теме
Хорошая и полезная статья.
2. Serj (Serj1C) 465 18.05.09 08:44 Сейчас в теме
А как отправить простой POST запрос без файла?
Например, авторизация на infostart.
3. Сергей Ожерельев (Поручик) 3624 18.05.09 09:39 Сейчас в теме
Вот так и отправить. Выкидываешь из файла отправки или содержимого POST-запроса лишнее, то что относится к двоичным данным или файлам, и отправляешь.

Изучай матчасть по генерации HTTP запросов, ссылки я для чего дал?
4. Сергей Ожерельев (Поручик) 3624 18.05.09 18:04 Сейчас в теме
От нечего делать, пока у нас сервер лежал, накатал обработку, иллюстрирующую пример POST-запроса без файлов.

В качестве сайта - подопытного кролика выбран инфостарт
Скачать http://forum.aeroion.ru/download.php?id=165
korablev64; Asdam; Serj1C; +3 Ответить 1
5. Serj (Serj1C) 465 18.05.09 20:50 Сейчас в теме
(4) Спасибо, теперь можно изучать
6. ValentinV (ValentinV) 25.05.09 11:29 Сейчас в теме
Почему таким сложным путем?
7. Сергей Ожерельев (Поручик) 3624 25.05.09 19:54 Сейчас в теме
Лёгкие пути в студию. Про передачу по ftp знаю, не тот в данном случае путь.
8. Михаил Хаов (мх) 16 11.08.09 14:33 Сейчас в теме
Можно ли как-то передать файл на сервер из 7.7 ?
9. Сергей Ожерельев (Поручик) 3624 11.08.09 14:39 Сейчас в теме
Можно. Только я от клюшек давно отошёл, забыл её как страшный сон, и даже искать что-то по ней неохота. Гугл вам поможет.
10. Сергей (lsp71) 10.09.09 15:47 Сейчас в теме
Спасибо за доходчивое объяснение
11. asel (Gabi) 29.10.09 11:01 Сейчас в теме
Спасибо вам большое за POST запрос.
Но у меня не получается отправить этот POST запрос вроде сделала все как описано выше. Запрос доходит, но без файла.
Все выглядит так :

СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(АрхивФайлаZIP));

ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ);

ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""key""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("11111");
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);

ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""dump""; filename=""" + СчетчикВыгрузок+".zip" + """");
ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);

ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("Загрузить");
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.Закрыть();

Пожалуйста помогите что не так?
12. Сергей Ожерельев (Поручик) 3624 29.10.09 16:51 Сейчас в теме
Сделать именно так, как в примере формирования содержимого POST-запроса. Имейте в виду, этот код практически полностью приведён из рабочей конфигурации.
Посмотреть содержимое массива $_FILES, $_POST на сервере.
В конце концов, проверить размер передаваемых данных.
13. Mopnex03 (Mopnex03) 05.11.09 05:45 Сейчас в теме
Ошибка работы с Интернет: server returned nothing (no headers, no data)
Такая ошибка вылетает... В чем проблема? Код взят из этой статьи.
 Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); 
   Содержимое = Base64Строка(Новый ДвоичныеДанные(Каталог+"upload.xml")); 

   ИмяФайлаОтправки = Каталог+"post.txt"; 
    ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ); 

    //Определяем раздел двоичных данных 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 
    //Указываем имя файла для передачи 
    ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""uploadfile""; filename=""upload.xml"""); 
    //Указываем тип передаваемых данных. 
    //С таким же успехом в Content-Type можно указать application/x-octet-stream 
    ФайлОтправки.ЗаписатьСтроку("Content-Type: application/octet-stream" + Символы.ПС + Символы.ПС); 
    //Записываем кодированные двоичные данные 
    ФайлОтправки.ЗаписатьСтроку(Содержимое); 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 

    ФайлОтправки.Закрыть(); 

   //Формируем заголовок POST-запроса. 

   ЗаголовокHTTP = Новый Соответствие(); 
   //Укажем формат данных Content-Type 
   ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); 
    
   //Укажем длину POST-запроса Content-Length 
   ФайлОтправки = Новый Файл(ИмяФайлаОтправки); 
   РазмерФайлаОтправки = ФайлОтправки.Размер(); 
   ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки); 
    
   //Инициализируем HTTPСоединение. При необходимости задаём параметры прокси. 
    
   НТТР = Новый HTTPСоединение(Сервер, Порт);      
    
   //Собственно, отправка данных серверу. 
    
   АдресСкрипта = "upload.php"; //Естественно, следует указать имя своего скрипта. 
   Попытка 
      НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, Каталог+"upload.tmp", ЗаголовокHTTP); 
   Исключение 
         Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки()); 
   КонецПопытки;
...Показать Скрыть
14. Виктор Сивульский (softmaker) 25.12.09 12:57 Сейчас в теме
Пример реализации, используя, 1С:Предприятие 7.7 здесь.
15. Олег Демиденко (FFelix) 368 10.03.10 19:49 Сейчас в теме
Попробовал, работает. Спасибо! :)
16. Valerikk (Valerikk) 14.05.10 17:42 Сейчас в теме
Здравствуйте.
Возникла проблемка:
если выполнять на стороне клиента, все нормуль;
но если то же самое делать на стороне сервера (регл. заданием), приходит пустой ПОСТ на сервер :( . ФайлОтправки и файл данных - идентичны.
Посоветуйте, плиз, где искать косяк...
17. Сергей Ожерельев (Поручик) 3624 14.05.10 18:01 Сейчас в теме
(16) Похожая проблема
http://www.forum.mista.ru/topic.php?id=476078

Ишите косяк или на веб-сервере или на сервере 1С, а то и на обоих.
18. ToR0310 (tor0310) 23.06.11 19:09 Сейчас в теме
Поручик пишет:
Лёгкие пути в студию. Про передачу по ftp знаю, не тот в данном случае путь.

Действительно, более легкие пути шли не туда. Этот работает. Спасибо
19. Илиена Пушкарева (lena9push) 07.09.11 17:39 Сейчас в теме
Отличная статья, спасибо!

Единственное возник вопрос.
Переводя текст в Base64 методом:
СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных));
Как сделать обратное??
Т.е. из Base64 перевести в исходный текст???
20. Ийон Тихий (cool.vlad4) 41 07.09.11 17:42 Сейчас в теме
(19)Base64Значение(СодержимоеZIP)...советую воспользоватся справкой в 1С
21. Илиена Пушкарева (lena9push) 07.09.11 18:05 Сейчас в теме
cool.vlad4, да, спасибо большое. Но на выходе будут двоичные данные, а их как преобразовать к исходнику?
(извиняюсь за нубство, просто уже устала искать))
22. Ийон Тихий (cool.vlad4) 41 07.09.11 18:21 Сейчас в теме
(21) ДвоичныеДанные.Записать(ИмяФайла), да ничего страшного, я просто имею ввиду, что быстрее такие вопросы в поиске посмотреть, ведь все методы и свойства помнить невозможно. В конфигураторе нажимаете F1, вводите в поиске ДвоичныеДанные и находите ответ на свой вопрос. Также рекомендую использовать (если есть конфигурация, типовая к примеру) поиск по конфигурации и смотреть как это сделано там.
23. Тарас (softest) 08.12.11 19:59 Сейчас в теме
А как использовате Get метод
24. Тарас (softest) 08.12.11 20:01 Сейчас в теме
И как можно передать куки с одной сесии в другую или єто невозможно, или вытянуть куки из браузера?
25. Павел Толкачев (ltfriend) 230 13.04.12 19:06 Сейчас в теме
(24) softest, для работы с куки можно использовать WinHttpRequest
как-то так (писалось на скорую руки, возможны ошибки, но смысл, думаю, понятен)
Соединение = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
Соединение.SetRequestHeader("Cookie", "value1=abs;value2=xyz");
Соединение.Open("GET", "www.mysite.com");
Соединение.Send();

ЗаголовкиОтвета = Соединение.GetAllResponseHeaders();

Cookie = Новый Структура;

МассивЗаголовков = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ЗаголовкиОтвета, Символы.ПС);

Для каждого Заголовок Из МассивЗаголовков Цикл

  Если Лев(Заголовок, 11) = "Set-Cookie:" Тогда

    СтрокаCookie = СокрЛП(Сред(Заголовок, 12));
    Поз = Найти(СтрокаCookie, "=");
    ИмяCookie = СокрЛП(Лев(СтрокаCookie, Поз-1));
    ЗначениеCookie = СокрЛП(Сред(СтрокаCookie, Поз+1));
    Cookie.Вставить(ИмяCookie, ЗначениеCookie);

  КонецЕсли;

КонецЦикла;
...Показать Скрыть
_nk_; greencactus2013; +2 Ответить
26. Павел Толкачев (ltfriend) 230 13.04.12 19:12 Сейчас в теме
А вообще можно файлы передавать как есть в виде двоичных данных с помощью процедуры "ОбъединитьФайлы"
ИмяФайла1 = ПолучитьИмяВременногоФайла("txt");

ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла1);
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""archive.zip""");
ЗаписьТекста.ЗаписатьСтроку("Content-Type: application/x-zip-compressed");
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.Закрыть();

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

ЗаписьТекста = Новый ЗаписьТекст(ИмяФайла2);
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку("--"+boundary+"--");
ЗаписьТекста.Закрыть();

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

МассивФайлов = Новый Массив;
МассивФайлов.Добавить(ИмяФайла1);
МассивФайлов.Добавить(ИмяФайлаСДанными);
МассивФайлов.Добавить(ИмяФайла2);

ОбъединитьФайлы(МассивФайлов, ИмяФайлаОтправки);

....
HTTP.ОтправитьДляОбработки(ИмяФайлаОтправки, "uploadfile.php", ИмяВходящегоФайла, Заголовки);
....
...Показать Скрыть
27. Сергей Ожерельев (Поручик) 3624 13.04.12 19:23 Сейчас в теме
(26) А вы пробовали? Данные точно попадают в массив $_FILES на сервере?
28. Павел Толкачев (ltfriend) 230 13.04.12 19:25 Сейчас в теме
(27) Поручик, пробовал. И со своим сайтом. И на стену ВКонтакте таким способом картинки загружаются без проблем.
29. Сергей Ожерельев (Поручик) 3624 14.04.12 01:31 Сейчас в теме
(28) Очень интересно. Знать бы этом когда делал проект или догадаться проверить. В этом случае статья могла и не появиться на свет.
30. Владислав Мороз (vlad.frost) 171 25.04.12 12:29 Сейчас в теме
Нужно ещё прокомментировать, как правильно формировать boundary в соответствии с RFC http://ru.wikipedia.org/wiki/MIME#.D0.9E.D1.80.D0.B3.D0.B0.D0.BD.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85

Для передачи множественного сообщения в заголовок Content-Type добавляется параметр boundary (граница), который обозначает последовательность символов, разделяющих части сообщения. Граница может состоять из цифр, букв и символов «'()+_,-./:=?». При использовании специальных символов (не цифр и букв) значение параметра boundary следует заключать в двойные кавычки «"». Максимальная длина границы — 70 символов.
Начало каждой части сообщения обозначается строкой «--boundary». Конец последнего сообщения обозначается строкой «--boundary--». Самые первые символы переноса строки CRLF (коды 13 и 10), которыми начинаются и заканчиваются пограничные строки не входят в содержимое самой части. Если за ними следуют ещё переносы строк, то они уже принадлежат включаемой части.


В моём случае долго не получалось увидеть на стороне сервера что-либо в массиве $_FILES пока я не догадался вставить ещё один перенос строки в самое начало отправляемого файла (так называемая преамбула):

Функция СформироватьФайлДляОтправки(ГраницаСекций)
	
	Попытка
		
		ИмяФайлаДляОтправки = ПолучитьИмяВременногоФайла("xml");
		ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаДляОтправки );
		ФайлОтправки.ЗаписатьСтроку(""); // <--- вот она, недостающая строка
		ФайлОтправки.ЗаписатьСтроку("--" + ГраницаСекций);
		ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""userfile""; filename=""" + ИмяФайлаДляОтправки + """");
		ФайлОтправки.ЗаписатьСтроку("Content-Type: text/xml");
		ФайлОтправки.ЗаписатьСтроку("");
		ФайлОтправки.ЗаписатьСтроку(ПолучитьДанные());
		ФайлОтправки.ЗаписатьСтроку("--" + ГраницаСекций + "--"); // <--- в конце обязательно указываем удвоенный дефис "--", как предписывает стандарт
				
		ФайлОтправки.Закрыть();
		
	Исключение
		ЗаписьЖурналаРегистрации("IGCDMS", УровеньЖурналаРегистрации.Ошибка, , , 
		"Не удалось сформировать файл для отправки: " + ОписаниеОшибки());
		Возврат "";
	КонецПопытки;
	
	Возврат ИмяФайлаДляОтправки;
	
КонецФункции
...Показать Скрыть
Boroda444; GusevNA; tumr; Arc; finder; +5 Ответить 2
31. Артем Боровлев (borrman) 09.06.12 01:06 Сейчас в теме
Спасибо большое за статью!
Очень выручили!

Есть, правда, вопрос:
использование Base64 продиктовано тем, что данные могут содержать HTML-значимые символы? И я должен использовать кодирование base64 только в случае, если сервер производит декодирование, верно? Если же сервер этого не делает, то я могу отправлять текст файла как он в файле записан.

(30)
У меня заработало без первой пустой строки.
32. Сергей Ожерельев (Поручик) 3624 09.06.12 08:28 Сейчас в теме
(31) В посте (26) написано, как обойтись без Base64.
33. Артем Боровлев (borrman) 09.06.12 14:02 Сейчас в теме
(32) Я использовал текстовый документ для получения текста.
34. Сергей Ожерельев (Поручик) 3624 26.01.13 11:59 Сейчас в теме
Надо бы переработать статью с учетом рекомендаций.
35. Андрей Журавлев (Wrols) 65 07.02.13 19:10 Сейчас в теме
При загрузке на сайт получал ошибку от ОтправитьДляОбработки Failed sending data to the peer.

Оказалось, что проблема с параметром HTTP заголовка:
ЗаголовокHTTP.Вставить("Referer", СерверИсточник);

Двое из трех хостингов плевали на этот параметр, а zenon выдавал упомянутую выше ошибку.

Поручик, уберите этот параметр из статьи, чтоб другие не сталкивались с такой проблемой.
36. Сергей Ожерельев (Поручик) 3624 02.03.13 02:03 Сейчас в теме
Статья переработана с учетом комментариев и приложена новая обработка с примерами отправки файла на сервер двумя способамии.
37. K0Tu K0Tu (K0Tu) 18.04.13 16:23 Сейчас в теме
Доброго дня. Информация очень интересна и полезна, спасибо автору. Но у меня возникает вопрос. Админ или программист на стороне сайта(я на стороне 1С программиста) требует от меня вставить в POST строку "pass=тут_пароль", куда конкретно вставить он не может сказать в заголовок ли в ФайлОтправки или еще куда. Подскажите, пожалуйста, куда этот реквизит вставить?
38. Сергей Ожерельев (Поручик) 3624 18.04.13 18:25 Сейчас в теме
(37) В файл отправки. Пример смотрите в обработке, там всё есть.
39. Stepan lazorik (lazorik) 2 30.07.13 17:44 Сейчас в теме
Доброе время суток!
я все прописываю как написано у вашей статье, но никак не получается отправить запрос, постоянно пустой POST массив отправляется... Можете помочь? Спасибо
40. Сергей Ожерельев (Поручик) 3624 30.07.13 20:29 Сейчас в теме
(39) скачайте любую из приложенных обработок, они все рабочие.

помощь платная.
41. Stepan lazorik (lazorik) 2 30.07.13 21:30 Сейчас в теме
Спасибо.Я попробовал пользоваться ваши обработки, но результат тот же.Может сталкивались с подобной проблемой, что пустой запрос отправляет?
42. Владислав Мороз (vlad.frost) 171 30.07.13 22:39 Сейчас в теме
(41) Обратите внимание на мой комментарий в этом обсуждении (30)
43. Светлана _ (svilsa) 04.09.13 15:41 Сейчас в теме
спасибо, очень нужная информация
44. ООО Открытые бизнес-решения (Open-BS) 12.09.13 14:32 Сейчас в теме
Коллеги, а с чем может быть связана ошибка
Ошибка при вызове метода контекста (ОбъединитьФайлы): Ошибка сборки файла
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
по причине:
Ошибка сборки файла
по причине:
Ошибка совместного доступа к файлу 'C:\Users\Obr\AppData\Local\Temp\2\v8_58C6_75.txt'
45. Сергей Ожерельев (Поручик) 3624 12.09.13 14:46 Сейчас в теме
(44) Она может быть связана с ошибкой совместного доступа к файлу 'C:\Users\Obr\AppData\Local\Temp\2\v8_58C6_75.txt'
46. ООО Открытые бизнес-решения (Open-BS) 12.09.13 15:06 Сейчас в теме
(45) Поручик, да я догадалась) А это было связано с тем, что был забыт метод ФайлОтправкиСередина.Закрыть(); Ну и в общем, если один из кусков собираемого файла не закрыт, его и объединить не получится, что логично.
47. Денис Кузнецов (kuza_87) 24 11.12.13 13:29 Сейчас в теме
в 8.3 Механизм теперь другой. Нет примера обработки с механизмом на 8.3?
48. Сергей Ожерельев (Поручик) 3624 11.12.13 13:33 Сейчас в теме
(47) Сделаю. Пятьсот рублей будет стоить.
49. Денис Кузнецов (kuza_87) 24 11.12.13 18:24 Сейчас в теме
(48) Поручик, Спасибо, уже сам сделал)))
50. Сергей Ожерельев (Поручик) 3624 23.01.14 08:09 Сейчас в теме
Добавлена обработка для платформы 8.3. в режиме управляемого приложения
51. Артур Рахманов (A2004333) 7 24.02.14 10:00 Сейчас в теме
Мне пришлось добавить перевод строки перед Баундэри, который сразу за двоичными данными. После двоичных данных у меня больше никаких разделов не было, поэтому этот же Баундэри стал последним.

Оригинальный код автора:
ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary + "--");

Мой код:
ФайлОтправкиКонец.ЗаписатьСтроку(Символы.ПС+"--" + Boundary + "--");

Большое спасибо автору за статью! Поставил плюс!
52. Сергей Ожерельев (Поручик) 3624 24.02.14 10:30 Сейчас в теме
(51) Этот вариант статьи давно устарел, но заливать новый нет желания, так как двиг сайта курочит оформление по-своему, то есть вся работа под хвост. Новая версия находится на моём сайте.
53. Сергей Ожерельев (Поручик) 3624 11.06.14 23:54 Сейчас в теме
Статья порядком устарела.
Обновил обработку Отправка данных и загрузка файлов на веб-сервер 8.3.epf, в которой реализовано скачивание файлов с почти любого сайта, в том числе Google Drive, показаны методы работы с отсылкой и получением HTTP-заголовков, работа с перенаправлением (редиректом), кукисами (cookies) и некоторые другие. Всё для платформы 8.3.
54. г. Казань Рустем Гумеров (Rustig) 822 03.07.14 14:17 Сейчас в теме
(0) спасибо за столь обширное описание
55. Аркадий Окунев (Arc) 24 16.10.14 15:15 Сейчас в теме

По мотивам статьи. Коротенькая функция, отправляющая файлы и данные через POST без создания временных файлов.
Функция ХТТПЗапросПост(АдресСайта,АдресРесурса,ДанныеЗапроса)
	ТекстДляОтправки = "";
	Boundary = Строка(Новый УникальныйИдентификатор());
	
	НомерФайла = 0;
	Для Каждого Элемент Из ДанныеЗапроса Цикл
		ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
		Если ТипЗнч(Элемент.Значение) = Тип("ДвоичныеДанные") Тогда 
			НомерФайла = НомерФайла + 1;
			ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""file"+НомерФайла+"""; filename=""" + Элемент.Ключ + """" + Символы.ПС;
			ТекстДляОтправки = ТекстДляОтправки + "Content-Type: application/x-octet-stream" + Символы.ПС;
			Данные = Base64Строка(Элемент.Значение);			
		Иначе	
			ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name="""+Элемент.Ключ+"""" + Символы.ПС;
			Данные = Строка(Элемент.Значение);
		КонецЕсли;	
		ТекстДляОтправки = ТекстДляОтправки + Символы.ПС;
		ТекстДляОтправки = ТекстДляОтправки + Данные + Символы.ПС;
		ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
	КонецЦикла;	
	Заголовки = Новый Соответствие();
	Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
	Заголовки.Вставить("Content-Lenght", XMLСтрока(СтрДлина(ТекстДляОтправки)));
	Запрос = Новый HTTPЗапрос(АдресРесурса,Заголовки);
	Запрос.УстановитьТелоИзСтроки(ТекстДляОтправки, КодировкаТекста.ANSI);
	
	Попытка
		Соединение = Новый HTTPСоединение(АдресСайта);
		Возврат Соединение.ОтправитьДляОбработки(Запрос);   
	Исключение
		Возврат Неопределено;
	КонецПопытки;
КонецФункции
...Показать Скрыть


Пример вызова:
	
Картинка = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
	Если Картинка.Формат()<>ФорматКартинки.PNG Тогда
		Картинка.Преобразовать(ФорматКартинки.PNG);
	КонецЕсли;	  
	ИдентификаторНоменклатуры = Строка(Номенклатура.УникальныйИдентификатор()); 
	ИмяКартинки = Строка(ИдентификаторНоменклатуры)+".png";
	
	ДанныеЗапроса = Новый Соответствие;
	ДанныеЗапроса.Вставить(ИмяКартинки,Картинка.ПолучитьДвоичныеДанные());
	ДанныеЗапроса.Вставить("product_id",ИдентификаторНоменклатуры);
	
	Ответ = ХТТПЗапросПост("127.0.0.1","/update_image.php",ДанныеЗапроса);
	Если Ответ<>Неопределено Тогда
		ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.ANSI);
		ЭлементыФормы.ПолеHTML.УстановитьТекст(ТекстОтвета);
	Иначе	
		Сообщить("Нет связи с сайтом!!! Проверьте Ваше интернет соединение.");
	КонецЕсли;	
...Показать Скрыть
Sol; Maxis; Soloist; +3 Ответить
56. Максим Жохов (ZhokhovM) 284 05.06.15 12:59 Сейчас в теме
Поручик, запускаю вашу обработку "ПросмотрИнфостарт.epf", пишет:

301 Moved Permanently
--------------------------------------------------------------------------------
nginx

Есть ли обработка на управляемой форме или можешь доделать эту обработку если не сложно?
58. Сергей Ожерельев (Поручик) 3624 05.06.15 13:32 Сейчас в теме
(56) Сдалась она тебе. Это давно устаревший вариант, чисто для примера.
59. Максим Жохов (ZhokhovM) 284 05.06.15 14:01 Сейчас в теме
(58) Поручик, ясно. Поищу её где-нибудь в другом месте с авторизацией.
60. Сергей Филькин (FSerg) 63 03.07.15 04:45 Сейчас в теме
Спасибо за публикацию!
Отправить корректно двоичные данные (файл) на сервер получилось можно только через "ОбъединитьФайлы".
61. Владислав Теут (darkmessiahan) 30 25.02.16 12:59 Сейчас в теме
(58) Поручик, Зачем оставлять выложенные устаревшие варианты.
62. Сергей Ожерельев (Поручик) 3624 25.02.16 13:05 Сейчас в теме
(61) Это исключительно абстрактные примеры, а не для практического использования.
64. Наташа Федоренко (Natali133) 30.04.16 13:48 Сейчас в теме
Статья очень хорошая. Сколько будет стоить помощь в написании кода отправки данных из 1с на веб-серевер через post -запросы,а также комментарии по некоторым вопросам? Код необязательно , чтобы был рабочим, главное, чтобы он отражал всю логику передачи - нужен для курсовой работы.
65. Сергей Ожерельев (Поручик) 3624 03.05.16 20:03 Сейчас в теме
(64) Так вот, в обработке всё рабочее и прокоментирована вся логика.
66. Михаил Григорьев (Mails79) 12 20.05.16 07:48 Сейчас в теме
(39) lazorik,
Уже наверно неактуально.
В моём случае долго не получалось увидеть на стороне сервера что-либо в массиве $_FILES пока я не догадался вставить ещё один перенос строки в самое начало отправляемого файла (так называемая преамбула):
ФайлОтправки.ЗаписатьСтроку(""); // <--- вот она, недостающая строка
67. Виталий Барилко (Diversus) 2294 14.03.17 11:49 Сейчас в теме
(65) Сергей, скажите пожалуйста, у Вас есть замечательная функция:

Код
Функция ПолучитьСодержимоеВебАдреса(Знач СерверПриемник, Знач АдресСтраницы = "",
                Знач ПараметрыСоединения = Неопределено, ЗаголовкиHTTP = Неопределено,
                Знач ПолучитьКакДвоичныеДанные = Ложь, Знач ЗащищенноеСоединение = Ложь) Экспорт
Показать полностью


Но она работает для 1С версии 8.2.18 и выше. Есть ли аналог для устаревших версий 1С, это нужно для 8.2.13 :(
Вы используете рекурсивное получение для адресов, которые с кодами 301, 302.
Может есть, что для моего случая?

Спасибо.
68. Сергей Ожерельев (Поручик) 3624 15.03.17 11:08 Сейчас в теме
(67) Разумеется нет. Я уже забыл про 8.2.
69. Сергей Шевченко (demon_infernal) 27 19.05.17 19:42 Сейчас в теме
В обработке для 8.3 параметр Порт задан строкой, "80", что приводит к ошибке "Несоответствие типов". И изменить нельзя, на модуле пароль. Исправьте и выложите рабочую версию, либо версию без пароля на модуле.
в управляемой форме все ок
70. Сергей Ожерельев (Поручик) 3624 19.05.17 20:46 Сейчас в теме
(69) Выдернуть и сделать обработку для обычного приложения несколько минут.
71. piton66 (piton66) 3 01.08.17 22:13 Сейчас в теме
Ошибка работы с Интернет: server returned nothing (no headers, no data)
Такая ошибка вылетает... В чем проблема?
Оставьте свое сообщение