Загрузка картинок с сайта из 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 не будет опубликован. Обязательные поля помечены *