1С:Предприятие 8.3.17 и выше
24.11.2022
Пример демонстрирует обработку кодов состояния, которые может вернуть HTTP-сервер. Отдельно обрабатываются ошибки запроса, ошибки сервера и перенаправление на новый URL-адрес.
Для работы примера требуется платформа "1С:Предприятие" версии 8.3.17 и выше.
Копировать в буфер обмена&НаКлиенте Процедура ВыполнитьЗапрос(Команда) ВыполнитьHTTPЗапрос("http://example.com"); КонецПроцедуры &НаКлиенте Процедура ВыполнитьHTTPЗапрос(ПолныйАдресРесурса) СтруктураURI = СтруктураURI(ПолныйАдресРесурса); HTTPСоединение = Новый HTTPСоединение(СтруктураURI.Хост, СтруктураURI.Порт); HTTPЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере); Попытка Результат = HTTPСоединение.Получить(HTTPЗапрос); Исключение // исключение здесь говорит о том, что запрос не дошел до HTTP-Сервера Сообщить("Произошла сетевая ошибка!"); ВызватьИсключение; КонецПопытки; // Анализируем фатальные ошибки // В большинстве случаев нужно остановить работу и показать пользователю сообщение об ошибке, // включив в него HTTP-статус // Ошибки 4XX говорят о неправильном запросе - в широком смысле // Может быть неправильный адрес, ошибка аутентификации, плохой формат запроса // Подробнее смотри http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4 Если Результат.КодСостояния >= 400 и Результат.КодСостояния < 500 Тогда Сообщить("Код статуса больше 4XX, ошибка запроса. Код статуса: " + Результат.КодСостояния); КонецЕсли; // Ошибки 5XX говорят о проблемах на сервере (возможно, прокси-сервер) // Это может быть программная ошибка, нехватка памяти, ошибка конфигурации и т.д. // Подробнее смотри http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5 Если Результат.КодСостояния >= 500 и Результат.КодСостояния < 600 Тогда Сообщить("Код статуса больше 5XX, ошибка сервера. Код статуса: " + Результат.КодСостояния); КонецЕсли; // Обрабатываем перенаправление Если Результат.КодСостояния >= 300 и Результат.КодСостояния < 400 Тогда Сообщить("Код статуса больше 3XX, Перенаправление. Код статуса: " + Результат.КодСостояния); Если Результат.КодСостояния = 302 Тогда Сообщить("Код статуса 302, Постоянное перенаправление."); АдресРесурса = Результат.Заголовки.Получить("Location"); Если АдресРесурса <> Неопределено Тогда Сообщить("Выполняю запрос по новому адресу " + АдресРесурса); ВыполнитьHTTPЗапрос(АдресРесурса); Иначе Сообщить("Сервер не сообщил адрес ресурса!"); КонецЕсли; КонецЕсли; КонецЕсли; // Статусы 1XX и 2XX считаем хорошими Если Результат.КодСостояния < 300 Тогда Сообщить("Скорее всего все хорошо"); Сообщить("Код статуса: " + Результат.КодСостояния); КонецЕсли; КонецПроцедуры &НаКлиенте Функция СтруктураURI(Знач СтрокаURI) Экспорт СтрокаURI = СокрЛП(СтрокаURI); // схема Схема = ""; Позиция = Найти(СтрокаURI, "://"); Если Позиция > 0 Тогда Схема = НРег(Лев(СтрокаURI, Позиция - 1)); СтрокаURI = Сред(СтрокаURI, Позиция + 3); КонецЕсли; // строка соединения и путь на сервере СтрокаСоединения = СтрокаURI; ПутьНаСервере = ""; Позиция = Найти(СтрокаСоединения, "/"); Если Позиция > 0 Тогда ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); КонецЕсли; // информация пользователя и имя сервера СтрокаАвторизации = ""; ИмяСервера = СтрокаСоединения; Позиция = Найти(СтрокаСоединения, "@"); Если Позиция > 0 Тогда СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); КонецЕсли; // логин и пароль Логин = СтрокаАвторизации; Пароль = ""; Позиция = Найти(СтрокаАвторизации, ":"); Если Позиция > 0 Тогда Логин = Лев(СтрокаАвторизации, Позиция - 1); Пароль = Сред(СтрокаАвторизации, Позиция + 1); КонецЕсли; // хост и порт Хост = ИмяСервера; Порт = ""; Позиция = Найти(ИмяСервера, ":"); Если Позиция > 0 Тогда Хост = Лев(ИмяСервера, Позиция - 1); Порт = Сред(ИмяСервера, Позиция + 1); КонецЕсли; Результат = Новый Структура; Результат.Вставить("Схема", Схема); Результат.Вставить("Логин", Логин); Результат.Вставить("Пароль", Пароль); Результат.Вставить("ИмяСервера", ИмяСервера); Результат.Вставить("Хост", Хост); Результат.Вставить("Порт", ?(Порт <> "", Число(Порт), Неопределено)); Результат.Вставить("ПутьНаСервере", ПутьНаСервере); Возврат Результат; КонецФункции
Обработка находится в каталоге \1CITS\EXE\demohttp
Скачать обработку "Пример работы с HTTPСоединение"