Работа с http-запросами (get) в языке 1С 8.3

Aug 15, 2022 09:51


/// Как получить страницу сайта через http-запрос
/// из 1с 8.3, 8.2

&НаКлиенте
Процедура КакПолучитьСтраницуСайтаЧерезHttpЗапросНаКлиенте()

// В сети есть сайт http://example.com
// Запросим содержимое его главной страницы.

// Подключаемся к сайту.
Соединение = Новый HTTPСоединение(
"example.com", // сервер (хост)
80, // порт, по умолчанию для http используется 80, для https 443
, // пользователь для доступа к серверу (если он есть)
, // пароль для доступа к серверу (если он есть)
, // здесь указывается прокси, если он есть
, // таймаут в секундах, 0 или пусто - не устанавливать
// защищенное соединение, если используется https
);

// Получаем текст корневой страницы через GET-запрос.
Запрос = Новый HTTPЗапрос("/");
// Если бы нужна была другая страница, мы бы указали,
// например, "/about" или "/news".

Результат = Соединение.Получить(Запрос);

Сообщить("Нам вернули код: " + Результат.КодСостояния);
// Что примерно означают коды результата запроса:
// [100, 299] - хороший код возврата
// [300, 399] - нас перенаправляют на другую страницу,
// причём 302 - код постоянного перенаправления
// [400, 499] - ошибка запроса
// [500, 599] - ошибка сервера

// в теле результата запроса - текст обычной html страницы
Сообщить("Тело результата: " + Результат.ПолучитьТелоКакСтроку());

КонецПроцедуры
 
/// Как обработать перенаправление в http-запросе
/// из 1с 8.3, 8.2

&НаКлиенте
Процедура КакОбработатьПеренаправлениеВHttpЗапросеНаКлиенте()

// Предположим, что мы хотим отправить поисковый http запрос
// гуглу и получить от него страницу с результатами нашего
// запроса.

// К примеру, будем искать по строке "работа программистом 1с в моём городе".

Соединение = Новый HTTPСоединение("www.google.com", 80);

Запрос = Новый HTTPЗапрос("/search?q=работа программистом 1с в моём городе");
Результат = Соединение.Получить(Запрос);

Сообщить("Нам вернули код " + Результат.КодСостояния);

Если Результат.КодСостояния = 302 Тогда
Сообщить("Нас перенаправили на другую страницу.");
Сообщить("Адрес этой страницы находится в заголовке результата Location.");
Сообщить("Вот он: " + Результат.Заголовки.Получить("Location"));

// Воспользуемся вспомогательной функцией СтруктураURI, которая
// сама вытаскивает из адреса имя хоста, порт и путь к ресурсу.

URI = СтруктураURI(Результат.Заголовки.Получить("Location"));

// Делаем новое подключение и get запрос.

Соединение = Новый HTTPСоединение(URI.Хост, URI.Порт);
Запрос = Новый HTTPЗапрос(URI.ПутьНаСервере);
Результат = Соединение.Получить(Запрос);

Сообщить("Нам вернули код " + Результат.КодСостояния);

// Сохраним тело ответа (это и есть наша страница с результатами
// поиска) в виде htm файла и тут же покажем его пользователю.

КаталогДляЭкспериментов = КаталогДокументов() + "\helpme1s.ru";
СоздатьКаталог(КаталогДляЭкспериментов);
ФайлРезультатов = КаталогДляЭкспериментов + "\test.htm";

Текст = Новый ЗаписьТекста(ФайлРезультатов, КодировкаТекста.UTF8);
Текст.Записать(Результат.ПолучитьТелоКакСтроку());
Текст.Закрыть();

Сообщить("Результаты поиска сохранены в " + ФайлРезультатов);

ЗапуститьПриложение(ФайлРезультатов);
КонецЕсли;

КонецПроцедуры

/// Как сохранить картинку с сайта через http-запрос
/// из 1с 8.3, 8.2

&НаКлиенте
Процедура КакСохранитьКартинкуСайтаЧерезHttpЗапросНаКлиенте()

// Запрашивать через http можно не только html-страницы,
// но и другие объекты, доступные нам через http,
// например, картинки.

// Сохраним на диск и покажем пользователю картинку, которая
// размещена в интернете по адресу:
// thumb7.shutterstock.com/display_pic_with_logo/1014806/270790184/
// stock-photo-summer-holidays-background-sea-background-270790184.jpg

Соединение = Новый HTTPСоединение("thumb7.shutterstock.com", 80);

// Get-запрос к ресурсу на сервере.
Запрос = Новый HTTPЗапрос("/display_pic_with_logo/1014806/270790184/" +
"stock-photo-summer-holidays-background-sea-background-270790184.jpg");
Результат = Соединение.Получить(Запрос);

Сообщить("Нам вернули код " + Результат.КодСостояния);

// Сама картинка - уже в теле ответа, осталось
// только записать её в файл на диск в виде двоичных данных.

КаталогДляЭкспериментов = КаталогДокументов() + "\helpme1s.ru";
СоздатьКаталог(КаталогДляЭкспериментов);
ФайлКартинки = КаталогДляЭкспериментов + "\test.jpg";

// Записываем картинку на диск.
Результат.ПолучитьТелоКакДвоичныеДанные().Записать(ФайлКартинки);

Сообщить("Сохранили картинку по адресу " + ФайлКартинки);

// Покажем картинку пользователю.
ЗапуститьПриложение(ФайлКартинки);

КонецПроцедуры

/// Как послать защищенный https запрос к серверу из 1с 8.3, 8.2

&НаКлиенте
Процедура КакПослатьЗащищенныйHttpsЗапросКСерверуНаКлиенте()

// Получим код страницы https://ya.ru
// Так как для доступа к ней используется защищенный
// протокол https - нам нужно заполнить последний
// параметр при соединении с сервером.

Соединение = Новый HTTPСоединение(
"ya.ru", // сервер (хост)
443, // порт, по умолчанию для http используется 80, для https 443
, // пользователь для доступа к серверу (если он есть)
, // пароль для доступа к серверу (если он есть)
, // здесь указывается прокси, если он есть
, // таймаут в секундах, 0 или пусто - не устанавливать
Новый ЗащищенноеСоединениеOpenSSL()
);

// Получаем текст корневой страницы через GET-запрос.
Запрос = Новый HTTPЗапрос("/");
// Если бы нужна была другая страница, мы бы указали,
// например, "/about" или "/news".

Результат = Соединение.Получить(Запрос);
Сообщить(Результат.КодСостояния);
Сообщить(Результат.ПолучитьТелоКакСтроку());

КонецПроцедуры

/// Как установить заголовки http-запроса из 1с 8.3, 8.2

&НаКлиенте
Процедура КакУстановитьЗаголовкиHttpЗапросаНаКлиенте()

// Возьмём чисто гипотетический пример.

// Нам нужно послать запрос к http://example.com/,
// передав ему в куках (cookie) session=231.
// Также мы будем передадим в запросе поле keep-alive,
// чтобы сервер не закрывал наше соединений к нему
// для повторых запросов.

// За всё это отвечают заголовки запроса.

Заголовки = Новый Соответствие;
Заголовки.Вставить("Cookie", "session=231");
Заголовки.Вставить("Connection", "keep-alive");

// Подключаемся к сайту.
Соединение = Новый HTTPСоединение("example.com");

// Получаем текст корневой страницы через GET-запрос.
Запрос = Новый HTTPЗапрос("/", Заголовки);
// Если бы нужна была другая страница, мы бы указали,
// например, "/about" или "/news".

Результат = Соединение.Получить(Запрос);

КонецПроцедуры

/// Как указать прокси для http-запроса из 1с 8.3, 8.2

&НаКлиенте
Процедура КакУказатьПроксиДляHttpЗапросаНаКлиенте()

// Если для соединения с интернетом используется прокси,
// его нужно указывать так.

ПроксиСервер = Новый ИнтернетПрокси;
// авторизация
ПроксиСервер.Пользователь = "Vova";
ПроксиСервер.Пароль = "123";
// прокси сервер прописывается для каждого протокола отдельно
ПроксиСервер.Установить("http", "192.168.0.1", "8080");
ПроксиСервер.Установить("https", "192.168.0.1", "6547");

// Созданный объект указываем при http соединении.

Соединение = Новый HTTPСоединение("example.com",,,, ПроксиСервер);

КонецПроцедуры

Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up