Предлагаю вашему вниманию функцию, позволяющую получить файл с интернета, в том числе, на которые установлен редирект.
&НаСервере
Процедура Пример()
ИмяФайла = ПолучитьФайлССервера(«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));
КонецЕсли;
Возврат ИмяФайла;
КонецФункции // ПолучитьФайлССервера()
&НаСервереБезКонтекста
Функция Разделить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);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить(«Схема», Схема);
Результат.Вставить(«Логин», Логин);
Результат.Вставить(«Пароль», Пароль);
Результат.Вставить(«ИмяСервера», ИмяСервера);
Результат.Вставить(«Хост», Хост);
Результат.Вставить(«Порт», ?(ПустаяСтрока(Порт), Неопределено, Число(Порт)));
Результат.Вставить(«ПутьНаСервере», ПутьНаСервере);
Возврат Результат;
КонецФункции
If you liked my post, feel free to subscribe to my rss feeds