Предлагаю вашему вниманию функцию, позволяющую получить файл с интернета, в том числе, на которые установлен редирект.
&НаСервере
 Процедура Пример()
ИмяФайла = ПолучитьФайлССервера(«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



