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


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

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

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

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

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

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

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

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

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

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

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

24 Comments

  1. sdn-1

    http://gortent.ru/img/dwn.png — там такой картинки вроде бы нету… ?

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

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

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

    (1) sdn-1, Если честно — не думал, что можно так просто скопировать файл.

    Но тем не менее:

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

    2. Когда парсишь много товаров и картинок — заливать картинку через сохранение в файл дольше, нежели через двоичные данные.

    А в целом: Возьму на заметку. Спасибо.

    Reply
  3. jigourt

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

    Синтаксис:

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

    Параметры:

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

    Тип: Строка.

    Адрес ресурса на сервере.

    <ИмяВыходногоФайла> (обязательный)

    Тип: Строка.

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

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

    Получает ресурс по адресу.

    Если код статуса HTTP, возвращенный сервером, >= 400, вызывается исключение.

    Показать

    Reply
  4. sdn-1

    Не совсем понял про авторизацию — что здесь имеется в виду ?

    Есть общедоступные каталоги где все на виду — забираем что нам нужно.

    Reply
  5. sdn-1

    (5) deniseek77,

    да — насчет авторизации понял — посмотрел ссылки на предыдущие статьи автора и ваши тоже — большое спасибо автору — тема интересная

    Reply
  6. DrAku1a

    (5)

    не работает уже. 1С сделали более суровую авторизацию…

    Reply
  7. letchik2000

    Уважаемые программисты,

    Кто-то из Вас уже решал такую задачу:

    Есть файл *.хls в нем есть два поля: Артикул и Ссылка на интернет страницу которая содержит Картинку соответствующую этому артикулу. Необходимо автоматически залить картинки в Базу 1С 8.2 УТ 10.3?

    Если есть готовые решения, поделитесь пожалуйста.

    Reply
  8. husky

    А как быть с gif-картинкой, ее не отображает?

    Reply
  9. CrackedBone

    (8) letchik2000, если в файле есть артикул и ссылка на саму картинку, то у меня есть обработка, но если ссылка не на картинку, а на страничку, где располагается картинка, то надо дописать парсер для выделения ссылки на картинку.

    Reply
  10. i.s.leo

    (10) CrackedBone, здравствуйте! сколько стоит ваш парсер? для того, чтобы добавить фото товаров из файла xls содержащего ссылки на страницу товара на сайте поставщика в Базу 1С 8.2 УТ 10.3

    Reply
  11. maxan

    Простенькая и хорошая обработочка. Скачал только для того, чтобы узнать разширение картинки. А оказывается все элементарно: создаешь картинку из двоичных данных и на этом все, далее работаешь с картинкой.

    Reply
  12. alan53

    (10) CrackedBone, Здравствуйте. Как можно приобрести ваш парсер? Будет ли работать в УНФ 1.6?

    Reply
  13. Serginio

    Для парсинга HTML можно использовать .Net в 1С. На примере использования HTTPClient,AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция

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

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

    Картинки = doc.QuerySelectorAll(«img[src]»);
    
    Для каждого стр из Картинки Цикл
    адрес=Врап.ПолучитьИнтерфейс(стр,»IElement»).GetAttribute(«src»);
    
    КонецЦикла
    
    Reply
  14. whtblck

    Спасибо!

    Reply
  15. hawk

    Добрый день, почему то не могу скачать нужную картинку по данной ссылки http://maki74.ru/wp-content/uploads/2016/02/102.jpg показывает только X

    Reply
  16. Xershi

    (16) потому что защищенное соединение. А в примере обычное.

    Reply
  17. hawk

    Спасибо уже разобрался

    Reply
  18. miller-adm

    А если защищенное соединение — то загрузить не получится?

    Reply
  19. METAL

    Павел, а, наоборот, загрузить картинку из 1С на хостинг картинок (подойдёт любой), и в итоге получить ссылку на картинку — не приходилось ли решать такую задачу?

    Reply
  20. opx

    (20) Можно и наоборот грузить. HTTPСоединение вообще предоставляет большие возможности.

    Reply
  21. jump0

    (18)

    Спасибо уже разобрался

    Не подскажете как разобрались? Такая же проблема. с https не могу скачать картинку.

    Reply
  22. jump0

    HTTPСоединение = Новый HTTPСоединение(АдресСервера,443,,,,,Новый ЗащищенноеСоединениеOpenSSL(), Ложь);

    для https — защищенного соединения.

    Reply
  23. dimauspeh

    Подскажите можно ли при помощи коннектора вызвать событие onclick у ссылки?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *