Как скачать файл с интернета по HTTP средствами 1с 8
Предлагаю вашему вниманию функцию, позволяющую получить файл с интернета, в том числе, на которые установлен редирект.
&НаСервере
Процедура Пример()
ИмяФайла = ПолучитьФайлССервера(«http://www.1c.ru/ftp/pub/pricelst/price_1c.zip»);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ИмяФайла, Соединение, Заголовки, флаг = Истина)
HTTPЗапрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере, Заголовки);
HTTPЗапрос.Заголовки.Вставить(«Accept-Charset», «utf-8»);
HTTPОтвет = Соединение.Получить(HTTPЗапрос, ИмяФайла);
Если HTTPОтвет.КодСостояния = 301 или HTTPОтвет.КодСостояния = 302 Тогда
ПутьКФайлуНаСервере = HTTPОтвет.Заголовки[«Location»];
URLРазделенный = РазделитьURL(ПутьКФайлуНаСервере);
ПутьКФайлуНаСервере = URLРазделенный.ПутьКФайлуНаСервере;
HTTPОтвет = ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ИмяФайла, Соединение, Заголовки, Флаг);
КонецЕсли;
файл = Новый Файл(ИмяФайла);
Если флаг и HTTPОтвет.КодСостояния >= 200 и HTTPОтвет.КодСостояния <= 299 Тогда флаг = Ложь; ИмяФайлаВр = ПутьКФайлуНаСервере; Пока Найти(ИмяФайлаВр,»/») > 0 цикл
ИмяФайлаВр = Сред(ИмяФайлаВр,Найти(ИмяФайлаВр,»/»)+1);
КонецЦикла;
Если НЕ ПустаяСтрока(ИмяФайлаВр) Тогда
ПереместитьФайл(ИмяФайла, файл.Путь + ИмяФайлаВр);
ИмяФайла = файл.Путь + ИмяФайлаВр;
КонецЕсли;
КонецЕсли;
Возврат HTTPОтвет;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьФайлССервера(ФайлНаВебСервере)
ВремКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ВремКаталог);
ПараметрыПолученияФайлов = Новый Структура;
ПараметрыПолучения = Новый Структура(«ИмяФайла»);
ПараметрыПолучения. Вставить(«ИмяФайла», ВремКаталог);
URLРазделенный = РазделитьURL(ФайлНаВебСервере);
ИмяСервера = URLРазделенный.ИмяСервера;
ПутьКФайлуНаСервере = URLРазделенный.ПутьКФайлуНаСервере;
Протокол = URLРазделенный.Протокол;
Заголовки = Новый Соответствие;
СписокФайлов = новый Массив;
Соединение = Новый HTTPСоединение(ИмяСервера, , , , , , );
ИмяФайла = ВремКаталог + «\temp.htm»;
HTTPОтвет = ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ИмяФайла, Соединение, Заголовки);
Если HTTPОтвет.КодСостояния < 200 Или HTTPОтвет.КодСостояния >= 300 Тогда
ФайлОтвета = Новый ЧтениеТекста(ВремКаталог + «\temp.htm», КодировкаТекста.UTF8);
ВызватьИсключение СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(ФайлОтвета.Прочитать(5 * 1024));
КонецЕсли;
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Возврат ИмяФайла;
КонецФункции // ПолучитьФайлССервера()
&НаСервереБезКонтекста
Функция РазделитьURL(Знач URL) Экспорт
СтруктураURL = СтруктураURI(URL);
Результат = Новый Структура;
Результат.Вставить(«Протокол», ?(ПустаяСтрока(СтруктураURL.Схема), «http», СтруктураURL.Схема));
Результат.Вставить(«ИмяСервера», СтруктураURL.ИмяСервера);
Результат.Вставить(«ПутьКФайлуНаСервере», СтруктураURL.ПутьНаСервере);
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция СтруктураURI(Знач СтрокаURI) Экспорт
СтрокаURI = СокрЛП(СтрокаURI);
// схема
Схема = «»;
Позиция = Найти(СтрокаURI, «://»);
Если Позиция > 0 Тогда
Схема = НРег(Лев(СтрокаURI, Позиция — 1));
СтрокаURI = Сред(СтрокаURI, Позиция + 3);
КонецЕсли;
// Строка соединения и путь на сервере.
СтрокаСоединения = СтрокаURI;
ПутьНаСервере = «»;
Позиция = Найти(СтрокаСоединения, «/»);
Если Позиция > 0 Тогда
ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1);
СтрокаСоединения = Лев(СтрокаСоединения, Позиция — 1);
КонецЕсли;
// Информация пользователя и имя сервера.
СтрокаАвторизации = «»;
ИмяСервера = СтрокаСоединения;
Позиция = Найти(СтрокаСоединения, «@»);
Если Позиция > 0 Тогда
СтрокаАвторизации = Лев(СтрокаСоединения, Позиция — 1);
ИмяСервера = Сред(СтрокаСоединения, Позиция + 1);
КонецЕсли;
// логин и пароль
Логин = СтрокаАвторизации;
Пароль = «»;
Позиция = Найти(СтрокаАвторизации, «:»);
Если Позиция > 0 Тогда
Логин = Лев(СтрокаАвторизации, Позиция — 1);
Пароль = Сред(СтрокаАвторизации, Позиция + 1);
КонецЕсли;
// хост и порт
Хост = ИмяСервера;
Порт = «»;
Позиция = Найти(ИмяСервера, «:»);
Если Позиция > 0 Тогда
Хост = Лев(ИмяСервера, Позиция — 1);
Порт = Сред(ИмяСервера, Позиция + 1);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить(«Схема», Схема);
Результат.Вставить(«Логин», Логин);
Результат.Вставить(«Пароль», Пароль);
Результат.Вставить(«ИмяСервера», ИмяСервера);
Результат.Вставить(«Хост», Хост);
Результат.Вставить(«Порт», ?(ПустаяСтрока(Порт), Неопределено, Число(Порт)));
Результат.Вставить(«ПутьНаСервере», ПутьНаСервере);
— Разгрузит мастера, специалиста или компанию;
— Позволит гибко управлять расписанием и загрузкой;
— Разошлет оповещения о новых услугах или акциях;
— Позволит принять оплату на карту/кошелек/счет;
— Позволит записываться на групповые и персональные посещения;
— Поможет получить от клиента отзывы о визите к вам;
— Включает в себя сервис чаевых.
Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе
Возврат Результат;
КонецФункции
А как быть с защищенным https ресурсом?