Загрузка картинок с сайта из 1С (HTTPСоединение)

10.02.14

Интеграция - WEB-интеграция

В этой статье я объясню как сохранять картинки сайта с помощью 1С. Для этого буду использовать встроенные объекты 1С (HTTPСоединение, HTTPЗапрос, HTTPОтвет).

Скачать файлы

Наименование Файл Версия Размер
СохранитьКартинкуССайта
.epf 7,12Kb
414
.epf 7,12Kb 414 Скачать

У меня часто возникает задача парсинга сайтов (интернет магазинов). Естественно, что сохранять картинки - обязательный функционал любой обработки для парсинга. До версии 8.2.18 я делал так как описано в этой статье.

Но теперь я считаю тот метод парсинга в корне неверным и когда созрею для новой статьи - удалю старую.

Основы работы с HTTPСоединение выможете почитать тут

Что еще хотелось бы добавить, так это то, что у объекта HTTPОтвет есть метод ПолучитьТелоКакДвоичныеДанные()
Им то мы и воспользуемся для сохранения картинки с сайта. Если вкратце - код должен выглядить следующим образом:

    Соединение = Новый HTTPСоединение(АдресСервера);
    Запрос = Новый HTTPЗапрос(АдресКартинки);
    Ответ = Соединение.Получить(Запрос);
    ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные();

Что делать с двоичными данными - я думаю ясно.

Полный код обработки Вы можете посмотреть во вложении, а также:

  1. Как отобразить картинку сайта на ПолеКартинки
  2. Как сохранить картинку в файл
  3. Как определить формат загружаемой картинки

А если подключить немного фантазии и кода - можно сохранять любые файлы (доступные для загрузки) по протоколу HTTP.

Вот и все. Ставьте плюсы, вопросы пишите в комментариях. С Вами был opx.

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15750    10    17    

11

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17558    6    15    

13

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16364    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25746    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88593    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sdn-1 153 10.02.14 18:00 Сейчас в теме
http://gortent.ru/img/dwn.png - там такой картинки вроде бы нету... ?

тем не менее ставлю +

и если автор позволит - небольшое дополнение по теме - скопировать файл к себе на локальный диск:

СсылкаФото = "http://gortent.ru/img/dwn.png";
КопироватьФайл (СсылкаФото, "С:\dwn.png");
fsgroup; user1194547; request4t; Istur; malets; vevd; Sintson; +7 Ответить
2. opx 794 10.02.14 18:18 Сейчас в теме
(1) sdn-1, Если честно - не думал, что можно так просто скопировать файл.
Но тем не менее:
1. Предложенный Вами способ не позволяет скачать файл от туда, где необходима авторизация.
2. Когда парсишь много товаров и картинок - заливать картинку через сохранение в файл дольше, нежели через двоичные данные.
А в целом: Возьму на заметку. Спасибо.
26. vevd 13.03.20 16:31 Сейчас в теме
(1) [IS-QUOTE]КопироватьФайл (СсылкаФото, "С:\dwn.png");
супер - эта строка мне очень помогла!
30. request4t 31.08.21 14:07 Сейчас в теме
(1)
любая с помощью этого кода картинка имеет размер 1 кб и не открывается. в чем может быть проблема? может из-за того, что сайт на https, а я в кодв вставляю ссылку без s?
32. yusm_proekts 11.02.22 14:25 Сейчас в теме
(30) получилось решить вопрос? "кода картинка имеет размер 1 кб и не открывается"
у меня после абсолютно любых способов - получается только такой результат.
3. jigourt 31 10.02.14 18:31 Сейчас в теме

Вариант синтаксиса: По адресу

Синтаксис:

Получить(<Источник>, <ИмяВыходногоФайла>, <Заголовки>)
Параметры:

<Источник> (обязательный)

Тип: Строка.
Адрес ресурса на сервере.
<ИмяВыходногоФайла> (обязательный)

Тип: Строка.
Имя файла, в который помещаются данные полученного ресурса.

Описание варианта метода:

Получает ресурс по адресу.
Если код статуса HTTP, возвращенный сервером, >= 400, вызывается исключение.
Показать
4. sdn-1 153 10.02.14 18:38 Сейчас в теме
Не совсем понял про авторизацию - что здесь имеется в виду ?
Есть общедоступные каталоги где все на виду - забираем что нам нужно.
6. sdn-1 153 11.02.14 08:07 Сейчас в теме
(5) deniseek77,

да - насчет авторизации понял - посмотрел ссылки на предыдущие статьи автора и ваши тоже - большое спасибо автору - тема интересная
7. DrAku1a 1679 11.02.14 10:32 Сейчас в теме
(5)не работает уже. 1С сделали более суровую авторизацию...
8. letchik2000 30.10.14 21:25 Сейчас в теме
Уважаемые программисты,
Кто-то из Вас уже решал такую задачу:
Есть файл *.хls в нем есть два поля: Артикул и Ссылка на интернет страницу которая содержит Картинку соответствующую этому артикулу. Необходимо автоматически залить картинки в Базу 1С 8.2 УТ 10.3?

Если есть готовые решения, поделитесь пожалуйста.
10. CrackedBone 01.12.14 16:55 Сейчас в теме
(8) letchik2000, если в файле есть артикул и ссылка на саму картинку, то у меня есть обработка, но если ссылка не на картинку, а на страничку, где располагается картинка, то надо дописать парсер для выделения ссылки на картинку.
11. i.s.leo 04.04.15 21:26 Сейчас в теме
(10) CrackedBone, здравствуйте! сколько стоит ваш парсер? для того, чтобы добавить фото товаров из файла xls содержащего ссылки на страницу товара на сайте поставщика в Базу 1С 8.2 УТ 10.3
13. alan53 01.06.16 15:44 Сейчас в теме
(10) CrackedBone, Здравствуйте. Как можно приобрести ваш парсер? Будет ли работать в УНФ 1.6?
9. husky 6 03.11.14 00:06 Сейчас в теме
А как быть с gif-картинкой, ее не отображает?
12. maxan 30.07.15 14:48 Сейчас в теме
Простенькая и хорошая обработочка. Скачал только для того, чтобы узнать разширение картинки. А оказывается все элементарно: создаешь картинку из двоичных данных и на этом все, далее работаешь с картинкой.
14. Serginio 938 01.06.16 17:56 Сейчас в теме
Для парсинга HTML можно использовать .Net в 1С. На примере использования HTTPClient,AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция

Вот пример поиска картинок Парсинг картинок с сайта


Для получения атрибута нужно применить следующий код

Картинки = doc.QuerySelectorAll("img[src]");

Для каждого стр из Картинки Цикл
	адрес=Врап.ПолучитьИнтерфейс(стр,"IElement").GetAttribute("src");
	
КонецЦикла
redscrest; +1 Ответить
15. whtblck 96 10.06.16 12:39 Сейчас в теме
16. hawk 66 10.03.17 08:15 Сейчас в теме
Добрый день, почему то не могу скачать нужную картинку по данной ссылки http://maki74.ru/wp-content/uploads/2016/02/102.jpg показывает только X
17. Xershi 1475 26.03.17 13:59 Сейчас в теме
(16) потому что защищенное соединение. А в примере обычное.
18. hawk 66 27.03.17 07:41 Сейчас в теме
Спасибо уже разобрался
23. jump0 7 23.05.19 09:55 Сейчас в теме
(18)
Спасибо уже разобрался

Не подскажете как разобрались? Такая же проблема. с https не могу скачать картинку.
19. miller-adm 111 26.10.17 17:58 Сейчас в теме
А если защищенное соединение - то загрузить не получится?
20. METAL 289 11.06.18 15:56 Сейчас в теме
Павел, а, наоборот, загрузить картинку из 1С на хостинг картинок (подойдёт любой), и в итоге получить ссылку на картинку - не приходилось ли решать такую задачу?
21. opx 794 11.06.18 20:15 Сейчас в теме
(20) Можно и наоборот грузить. HTTPСоединение вообще предоставляет большие возможности.
22. пользователь 18.06.18 08:24
Сообщение было скрыто модератором.
...
24. jump0 7 23.05.19 10:31 Сейчас в теме
HTTPСоединение = Новый HTTPСоединение(АдресСервера,443,,,,,Новый ЗащищенноеСоединениеOpenSSL(), Ложь);
для https - защищенного соединения.
Nikola_N; request4t; user775020; VickWood; +4 Ответить
25. dimauspeh 02.12.19 18:51 Сейчас в теме
Подскажите можно ли при помощи коннектора вызвать событие onclick у ссылки?
27. piton66 2 05.02.21 14:22 Сейчас в теме
А кто подскажет как скачивать картинки в WEBP? и просматривать их через 1С.
33. HaIIpuKoJIe 25.03.22 11:47 Сейчас в теме
(27)Добрый день. Не нашли решение? Сейчас стоит такая же задача, нужно сохранить webp на диск, а вместо этого скачивается html страница.
28. request4t 17.04.21 15:54 Сейчас в теме
Здравствуйте.

помог код

СсылкаФото = "http://gortent.ru/img/dwn.png";
КопироватьФайл (СсылкаФото, "С:\dwn.png");

спасибо автору.
29. kovaleks78 4 16.06.21 05:35 Сейчас в теме
Добрый день!

А ссылки на картинки вот в таком формате будет загружать?
http://relefopt.ru/getimage.php?guid=2a36a37b-8d71-11e3-8000-e4115bd714a8
34. vis_tmp 32 05.07.22 22:01 Сейчас в теме
(29)У вас получилось скачать по такой ссылке?
36. user1734162 23.08.22 14:37 Сейчас в теме
(34) да, по такой ссылке можно скачать. Попробуйте использовать мой код ниже.
31. request4t 31.08.21 17:27 Сейчас в теме
код с запросом подходит для https. а код с копированием файла не всегда.
35. user1734162 23.08.22 14:30 Сейчас в теме
Добрый день.
Помогите, пожалуйста, разобраться в чем дело - не показывает картинку (вместо картинки - Х). Причем картинки с других источников подгружаются корректно.
Код:
         ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
	 Соединение = Новый HTTPСоединение("cdn1.ozone.ru",,,,,, ЗащищенноеСоединение);
	 Запрос = Новый HTTPЗапрос("/s3/multimedia-q/wc1000/6306757862.jpg");
	 Ответ = Соединение.Получить(Запрос);	
	 ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные();
	 АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки);
	 КартинкаРезультат = АдресВременногоХранилищаФайла;
Показать

Если сохранить картинку через 1С на диск и потом руками подтянуть к товару - все равно отображается Х
Для сохранения использую:
         ПутьДляСохранения = "G:\1\6306757862.jpg";
	 Ответ = Соединение.Получить(Запрос);
	 Ответ.ПолучитьТелоКакДвоичныеДанные().Записать(ПутьДляСохранения);
37. user1734162 23.08.22 16:28 Сейчас в теме
(35) Сейчас понял что проблема в самой картинке. Формат .webp
39. SBVoshod 29.03.23 15:07 Сейчас в теме
Всем добрый денек, может кто умный подскажет такой момент:
Есть ссыль, собственно как пример вот: https://kaspi.kz/pay/renessance?service_id=4588&7228=9874566&amount=100
В сыле зашито изображение QR в видео строки Base64.
Собственно цепляюсь я к этому делу без проблем через HTTP, сохраняю в tmp, далее разбираю через ЧтениеHTML.
И проблем особо нет, вот кусок кода, который работает:

ЧтениеHTML = Новый ЧтениеHTML;
		ЧтениеHTML.ОткрытьФайл(ВременныйФайлHTMLИмя,"UTF-8");
		ПостроительDOM = Новый ПостроительDOM;
		ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
		
		ЭлементыDOM = ДокументHTML.ПолучитьЭлементыПоИмени("div");
		
		ДанныеBase64 = Неопределено;   
		Для Каждого ЭлементDOM Из ЭлементыDOM Цикл 
			Если ЭлементDOM.ИмяКласса = "block_qr" Тогда
				Для каждого ДочУзл Из ЭлементDOM.ДочерниеУзлы Цикл
					Если ДочУзл.ИмяУзла = "img" Тогда  
						ДанныеBase64 = ДочУзл.Источник;
					КонецЕсли;    
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
Показать


Но тут выяснилось, что часть QR данный код не считывает. Стал разбираться, и уперся в стену:
смотрю получение "ДочУзл.Источник;" через отладчик и там ровно половина картинки, т.е. половина строки и все, хотя открываю сохраненный tmp-файл, который читаю, и там все ОК, картинка целая. Это какая то трабла именно 1С при чтении строк Base64?
Может кто что предложит?
Заранее спасибо.
40. SBVoshod 30.03.23 05:17 Сейчас в теме
(39) Сам спросил, сам ответил. Ну вдруг кому понадобиться.
В общем разобрался я с косяком иначе. Саму по себе проблему так и не решил.
Перечитал HTML через ТекстовыйДокумент построчно.
Получил строку с картинкой. Обрезал. Вылезла другая проблема - строка не преобразуется в двоичные данные.
Сравнил с тем, что должно быть - в полученной строке символ "+" заменен сочетанием, которое я сюда вписать не могу, потому что оно автоматом преобразуется в +. Если шо, смотрите таблицу "Таблица символов ASCII", единственное, в строке после сочетания еще ";" были.
Ну, СтрЗаменить() и вуаля, наконец то получена необходимая строка в необходимом виде.
Но всем все равно спасибки :)
Оставьте свое сообщение