Обработка перенаправлений 3xx (HTTP Redirect) средствами 1С

11.11.20

Интеграция - WEB-интеграция

Статья описывает способ обработки HTTP ответов с кодом 3хх, говорящих о том, что целевой ресурс переехал по другому адресу.

Скачать исходный код

Наименование Файл Версия Размер
HTTP Redirect:
.epf 6,58Kb
4
.epf 6,58Kb 4 Скачать

Статья больше, как памятка для себя. Возникла потребность получать данные файла с таблицей excel (а впрочем неважно какого файла) по ссылке на какой то ресурс на файловом хранилище. В моём случае это был microsoft onedrive, но принципиально это применимо к любому http запросу.

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

Запрос в 1С возвращает ответ с кодом состояния 301 и в теле запроса html код о том, что требуемый ресурс переехал по некоторой ссылке. Грешным делом, сначала возникла мысль получить ДокументDOM из кода html, выдернуть оттуда содержимое href, но потом хватило ума почитать документацию на MDN: Redirections и Location

Для реализации кодом 1С необходимо, получив код состояния 3хх в httpОтвет, выполнить повторый запрос к тому же серверу, но указать путь к ресурсу из заголовка "Location". Так же, в моём случае, первый ответ возвращал токен аутентификации в заголовке "Set-Cookie", его содержимое должно было попасть в заголовок "Cookie" повторного запроса.

Код получился примерно следующий:

Процедура ПрочитатьДанные()
	
        АдресФайла = "Какой то произвольный URL";
	Защита = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
  	СтруктураУРИ = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресФайла);
	Попытка
		Соединение = Новый HTTPСоединение(СтруктураУРИ.ИмяСервера, , , , , , Защита);
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	Запрос = Новый HTTPЗапрос(СтруктураУРИ.ПутьНаСервере);
	Ответ = ОтправитьЗапрос(Соединение, Запрос);
	Если Ответ.КодСостояния = 200 Тогда
                //Как то обрабатываем результат
		//ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();
		//АдресХранилища = ПоместитьВоВременноеХранилище(ДД, Новый УникальныйИдентификатор);
	Иначе
		//Как то обрабатываем ошибку
		АдресХранилища = "";
	КонецЕсли;
КонецПроцедуры

Функция ОбработатьРедирект(Соединение, Ответ)
	//Предполагаем, что если ушли на редирект, то Location точно есть
 	Запрос = Новый HTTPЗапрос(Ответ.Заголовки["Location"]);
	УстановитьПеченьку = Ответ.Заголовки["Set-Cookie"];
        //А вот наличие "Set-Cookie" уже проверяем
	Если НЕ УстановитьПеченьку = Неопределено Тогда
 		Запрос.Заголовки.Вставить("Cookie", УстановитьПеченьку);
	КонецЕсли;
        //Уходим в рекурсию
	Ответ = ОтправитьЗапрос(Соединение, Запрос);
	Возврат Ответ;
	
КонецФункции

&НаСервере
Функция ОтправитьЗапрос(Соединение, Запрос)
	Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);
	Если Ответ.КодСостояния = 200 Тогда
        //Выходим из рекурсии
		Возврат Ответ;
	ИначеЕсли Ответ.КодСостояния > 300 И Ответ.КодСостояния < 400 Тогда
		//Редирект
		Ответ = ОбработатьРедирект(Соединение, Ответ);
	ИначеЕсли Ответ.КодСостояния >= 400 Тогда
		//Обработка ошибки
		Возврат Ответ;
	КонецЕсли;
	Возврат Ответ;
КонецФункции

Тестировалось на платформе 1С:Предприятие 8.3 (8.3.15.1830).

обработка http

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16135    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18247    10    15    

16

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

25200 руб.

28.05.2015    85518    26    51    

50

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    13023    33    8    

13

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16665    43    49    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1298 11.11.20 07:19 Сейчас в теме
2. logos 211 11.11.20 08:54 Сейчас в теме
3. logos 211 11.11.20 08:58 Сейчас в теме
Если честно, всё это имеет мало смысла до тех пор, пока запросы выполняются синхронно. Остаётся надеяться, что в очередной версии платформы подвезут асинхронный http запрос.
5. VVladislav 10.08.22 14:23 Сейчас в теме
(3) завезли же!
HTTPСоединение (HTTPConnection)
ОтправитьДляОбработкиАсинх (PostAsync)
Доступен, начиная с версии 8.3.21.
Синтаксис:
ОтправитьДляОбработкиАсинх(<HTTPЗапрос>, <ИмяВыходногоФайла>)
4. user817897 2 11.11.20 09:25 Сейчас в теме
6. logos 211 11.08.22 13:57 Сейчас в теме
(5) Так когда завезли и когда это было писано
Оставьте свое сообщение