|
Загрузка файла из интерет | ☑ | ||
---|---|---|---|---|
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. все взлетело. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |