В общем суть - WebDAV сервер, в каталоге "export" более миллиона файлов.
HttpСоединение = Новый HTTPСоединение(ИмяСервера, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
HttpЗапрос = Новый HTTPЗапрос("export", Заголовки);
HttpОтвет = HttpСоединение.ВызватьHTTPМетод("PROPFIND", HttpЗапрос); - висит порядка 20 минут, потом вываливается с ошибкой
<ht ml><body><h1>504 Gateway Time-out</h1>
The server didn't respond in time.
</body></html>
Нашел что PROPFIND имеет возможность делать постраничный запрос:
"PROPFIND /Downloads/?offset=3&amount=3" - пример из статьи, Чтобы запросить первую страницу, следует просто передать параметр amount со значением «3».
Как передать этот параметр?
Пробовал так:
HttpЗапрос = Новый HTTPЗапрос("export/?amount=3", Заголовки); - ни чего не поменялось
Заголовки.Вставить("Amount", 3); - тоже. Пробовал даже так Заголовки.Вставить("amount", 3);
может сталкивался кто, может этот параметр в заголовках должен как-то по другому называться...
Глубина 0: Получить свойства каталога
Глубина 1: как 0 + свойства всех файлов в каталоге
Глубина бесконечности: как 1 + свойства всех файлов в подкаталогах каталога (рекурсивно)
в RFC ни слова про постраничный запрос..
Нашел параметр в настройках минио - requests_deadline - попросил его увеличить, может поможет
(7) для будущих поколений...
работает такой код, проверено на 8.3.14.1565
HttpСоединение = Новый HTTPСоединение(<Адрес ресурса>, 443, <Логин>, <Пароль>,,, Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Depth", 1);
HttpЗапрос = Новый HTTPЗапрос(</ИмяПапки/>, Заголовки); // ИмяПапки указывать со слешами, например "/PatchInOut/"
HttpОтвет = HttpСоединение.ВызватьHTTPМетод("PROPFIND", HttpЗапрос);
ОтветСтрокой = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); // а дальше получаем ответ строкой или потоком, кому как нравится и распарсиваем для получения имен всех файлов
лМассивФайлов = Новый Массив;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ОтветСтрокой); // имена для распрасивания смотреть индивидуально (это пример)
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "D:multistatus" Тогда
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "D:response" Тогда
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "D:href" Тогда
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "D:propstat" Тогда
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "D:status" Тогда
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "D:displayname" Тогда
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
лИмяФайла = ЧтениеXML.Значение;
Если СтрНайти(лИмяФайла, ".") <> 0 Тогда
// точка в имени означает, что это файл
// без точки означает, что это имя папки
Если лМассивФайлов.Найти(лИмяФайла) = Неопределено Тогда
лМассивФайлов.Добавить(лИмяФайла);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;