Имя: Пароль:
1C
 
Загрузка файла из интерет
,
0 programmer1c
 
17.03.17
14:49
Подскажите, пожалуйста.Надо файл с сайта скачать с помощью 1С.
ссылка вот http://guvm.mvd.ru/upload/expired-passports/list_of_expired_passports.csv.bz2.

Использую метод описанный здесь http://usersv81c.ru/kak-skachat-fajl-s-interneta-po-http-sredstvami-1s-8.htm

Но для моего файл не отрабатывает. выдает ошибку.
1 programmer1c
 
17.03.17
14:49
метод скопировть файл тоже не отрабатывает
2 silent person
 
17.03.17
15:09
там файлик 400 Мб, может из-за этого.
3 Неверный Параметр И
 
17.03.17
15:13
Подожди-подожди, ничего не говори, сейчас протелепатируем ошибку!
4 programmer1c
 
17.03.17
15:17
(2) скорей всего.и че никак не побороть?
5 programmer1c
 
17.03.17
15:19
неужели,если задача чуть-чуть сложнее.никто ничего предложить.не может
6 Asmody
 
17.03.17
15:20
Вторая ссылка не открывается. Как скачиваешь?
7 Asmody
 
17.03.17
15:21
И, да, ошибку в студию
8 dezss
 
17.03.17
15:27
Так не пробовал?

    хСоединение = Новый HTTPСоединение("guvm.mvd.ru");
    хЗапрос = Новый HTTPЗапрос("/upload/expired-passports/list_of_expired_passports.csv.bz2");
    хОтвет = хСоединение.ОтправитьДляОбработки(хЗапрос,"C:\list_of_expired_passports.csv.bz2");
9 programmer1c
 
17.03.17
15:28
вторая ссылка - это описание как делать щас перевыложу.какая-то кривая получилоась.

ну ошибка 503 Service Unavailable («сервис недоступен»).
10 programmer1c
 
17.03.17
15:31
хм ссылка на пример ка делать верна.буквально час назад рабоатала.ну да ладно
вот так делаю
&НаСервере
Процедура Команда3НаСервере()
    ИмяФайла = ПолучитьФайлССервера("http://www.1c.ru/ftp/pub/pricelst/price_1c.zip";);
//ИмяФайла = ПолучитьФайлССервера("http://guvm.mvd.ru/upload/expired-passports/list_of_expired_passports.csv.bz2";);
////http://guvm.mvd.ru/upload/expired-passports/list_of_expired_passports.csv.bz2
КонецПроцедуры

&НаСервереБезКонтекста
Функция Получить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);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("Схема", Схема);
Результат.Вставить("Логин", Логин);
Результат.Вставить("Пароль", Пароль);
Результат.Вставить("ИмяСервера", ИмяСервера);
Результат.Вставить("Хост", Хост);
Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт)));
Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
Возврат Результат;
КонецФункции
11 programmer1c
 
17.03.17
15:32
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Ответ;
12 programmer1c
 
17.03.17
15:34
(8) в этом случае код ошибки 302
13 dezss
 
17.03.17
15:42
Чета я очкую с этим сайтом баловаться)))
14 dezss
 
17.03.17
15:47
Кароч, попробуй вместо http, написать https...
Именно это он в ответе и присылает.
Или перепиши вот эту строку

HTTPОтвет = ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ИмяФайла, Соединение, Заголовки, Флаг);

так

HTTPОтвет = ПолучитьФайлССервера(ПутьКФайлуНаСервере);
15 dezss
 
17.03.17
15:47
тока эта...там может быть очень глубокая рекурсия....так что поаккуратней)))
16 dezss
 
17.03.17
15:48
Фигня в том, что он в HTTPОтвет.Заголовки["Location"] передает полный путь, а не последнюю часть.
17 dezss
 
17.03.17
15:51
И еще в
Новый HTTPСоединение(<Сервер>, <Порт>, <Пользователь>, <Пароль>, <Прокси>, <Таймаут>, <ЗащищенноеСоединение>, <ИспользоватьАутентификациюОС>)

Надо этот параметр заполнить: <ЗащищенноеСоединение>
18 Asmody
 
17.03.17
16:36
(12) 302 — это не ошибка, это редирект. Надо из заголовков достать путь редиректа и перезапрашивать по нему.
503 — это ошибка на сервере. Скорее всего, из-за того, что сервер перегружен. Тут или ждать, или пинать админа сервера.
19 dezss
 
17.03.17
16:42
(18) я про это и написал...
только редирект содержит полный путь, а его обработка его подставляет в запрос.
20 programmer1c
 
17.03.17
18:07
(19) поясните пож.что это значит:только редирект содержит полный путь, а его обработка его подставляет в запрос.
21 programmer1c
 
17.03.17
18:07
что мне надо сделать,чтоб взлетело?
22 бегинер
 
17.03.17
21:23
а так пробовал:
23 бегинер
 
17.03.17
21:23
Глобальный контекст
КопироватьФайл (FileCopy)
Синтаксис:
КопироватьФайл(<Имя файла источника>, <Имя файла приемника>)
Параметры:
<Имя файла источника> (обязательный)
Тип: Строка. Полное имя файла-источника.
<Имя файла приемника> (обязательный)
Тип: Строка. Полное имя файла-приемника.
Описание:
Копирует файл-источник в файл-приемник. Допускается перезапись файла-приемника
Примечание:
Файл-приемник при создании будет иметь права доступа, аналогичные назначаемым при создании новых файлов (т.е. права доступа к файлу-источнику не копируются).
Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
24 programmer1c
 
17.03.17
23:32
всех благодарю за помощь.после того как написал
https://guvm.mvd.ru/upload/expired-passports/list_of_expired_passports.csv.bz2. вместо
http://guvm.mvd.ru/upload/expired-passports/list_of_expired_passports.csv.bz2. все взлетело.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший