Работа с HTTP в 1С 8.2 и 8.3

 

В этой статье я попробую рассказать о том, какими средствами располагает технологическая платформа для работы с протоколом HTTP. В начале будет немного общей информации, а затем конкретные примеры. Отмечу, что в статье используется технологическая платформа версии 8.3.12.1595.

Общая информация

Для работы с протоколом HTTP в 1С существуют три основных объекта — HTTPСоединение, HTTPЗапрос и HTTPОтвет, кроме этого для создания HTTPS-соединения используется объект ЗащищенноеСоединениеOpenSSL, а для соединения через прокси-сервер объект ИнтернетПрокси. Существует еще несколько объектов, которые могут использоваться при работе с протоколом HTTP, но используются они достаточно редко и не так важны.

Назначение основных объектов следует из названия.

HTTPСоединение отвечает за соединение с сервером — в свойствах объекта, помимо обязательного адреса, можно указать порт, прокси, логин, пароль, таймаут, защищенное соединение и флаг аутентификации ОС, а методы повторяют основные методы HTTP.

HTTPЗапрос позволяет описать что именно мы хотим от сервера — в свойствах нужно обязательно указать адрес ресурса к которому мы обращаемся, кроме этого имеется возможность указать какие-либо заголовки, методы же, в свою очередь, позволяют различными способами установить и получить тело запроса.

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

Список заголовков HTTP

Список кодов состояния HTTP

ИнтернетПрокси позволяет указать настройки прокси-сервера — с помощью метода Установить()  можно указать параметры для подключения к прокси-серверу, отмечу, что свойства «Пароль» и «Пользователь» являются устаревшими, использовать их не рекомендуется.

ЗащищенноеСоединениеOpenSSL создает защищенное соединение OpenSSL — имеется возможность указать сертификат клиента и/или сертификат удостоверяющего центра, в большинстве случаев (для доступа к обычным сайтам по протоколу HTTPS) указывать какие либо сертификаты не требуется.

Заканчиваем с теорией и переходим к практике.

Практические задачи при работе с HTTP

В качестве практической части рассмотрим задачи, которые чаще всего встречаются при работе с протоколом HTTP в 1С

Как получить страницу GET-запросом?

Как обработать перенаправление в HTTP-запросе?

При попытке получить главную страницу Яндекса мы получаем ответ, что страница «перемещена временно» (код состояния 302). При помощи заголовка Location мы можем определить куда нас отправляет сервер — на безопасную версию главной страницы Яндекса (на большинстве современных ресурсов действует переадресация с http на https).

Далее разбиваем адрес из заголовка Location на составные части, при помощи функции «СтруктураURI», которую я позаимствовал из библиотеки стандартных подсистем.

 

Как сделать HTTPS-запрос из 1С?

Немного изменим предыдущий пример — теперь при получении кода 302 мы создаем безопасное соединение и выполняем HTTPS-запрос (адрес сервера и адрес ресурса берем из структуры URI). Функцию «СтруктураURI» можно взять из примера выше.

Как сделать HTTP/HTTPS запрос через прокси-сервер из 1С?

При установке параметров прокси-сервера необходимо указать протокол, для которого устанавливаются параметры.

Как установить заголовки в HTTP-запросе из 1С?

Установить заголовки HTTP-запроса может потребоваться в самых различных ситуациях, сделать это несложно.

Как сохранить картинку или скачать файл с сайта HTTP-запросом из 1С?

Скачать файл/сохранить картинку при помощи HTTP-запроса из 1С совсем не сложно. В примере показано скачивание логотипа компании «1С»  и два способа записи этого логотипа на диск.

Как послать POST-запрос из 1С?

POST-запросы отличаются от GET-запросов тем, что помимо заголовков могут содержать еще и тело. Именно поэтому в случаях, когда нужно отправить какую-то информацию на сайт (авторизация, файл, что-то еще)  необходимо воспользоваться POST-запросом.

В качестве небольшого примера рассмотрим обращение с сервису проверки орфографии Яндекс.Спеллер через POST-запрос.

Отдельно отмечу заголовок application/x-www-form-urlencoded  — он означает, что параметры в теле запроса кодируются в кортежах с ключом, разделенных символом «&», с «=» между ключом и значением. Если же в теле запроса требуется отправить двоичные данные, то в заголовке «Content-Type» следует указать multipart/form-data;boundary=»boundary» (вместо «boundary» можно выбрать другой разделитель). Достаточно неплохо про метод POST написано здесь.

Об отправке составных (multipart) HTTP-сообщений при помощи потоков можно прочитать в статье про двоичные данные.

На этом все, надеюсь, что данная статья была Вам полезна.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 36, средняя оценка: 4,28 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 5
  1. Владимир

    Добрый день

    Есть ссылка http://sait2/pls/info/REESTR_PERSONS_TO_1C.run?rep_user=IVANOV&p_com=30274&p_reestr_format=xls&p_action=Пуск

    При выполнении в браузере по ней открывается форма отчета и сразу формируется Exel файл

    СерверИсточник = «sait2»;
    Адрес = Новый HTTPЗапрос(«/pls/info/REESTR_PERSONS_TO_1C.run?rep_user=IVANOV&p_com=30274&p_reestr_format=xls&p_action=Пуск»);
    ИмяВходящегоФайла = C:\1\1.xls;
    НТТР = Новый HTTPСоединение(СерверИсточник);
    НТТР.Получить(Адрес, ИмяВходящегоФайла);
    ВходящийФайл = Новый Файл(ИмяВходящегоФайла);

    При выполнении, в файл сохраняется только форма с параметрами, а не сам готовый отчет

    Надо что бы при запуске из один 1С формировался файл отчета и сохранялся на диск

    В чем может быть проблема?

    Это ссылка на получение отчета из базы оракл и
    и в базе так же происходит работа через internet explorer

    может надо другим способом запускать формирование файла отчета?

  2. Сергей

    Хорошая статья!

  3. Сергей

    Огромнейшее Вам спасибо! Одна эта статья очень помогла решить сразу все проблемы вставшие при разработке системы интеграции с Яндекс.Заправки :smile:

  4. Илья

    Спасибо, статья помогла отправить POST-запрос из 1С

  5. Дмитрий

    Дай я тебя обниму!

    Спасибо за рабочий пример с POST запросом к Yandex Speller.

    Очень помог! :smile:

    Я даже готов тебя наградить премией! :idea:

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: