WebDAV PROPFIND постраничный запрос содержимого

1. EvilDoc 178 20.07.21 15:27 Сейчас в теме
В общем суть - 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);

может сталкивался кто, может этот параметр в заголовках должен как-то по другому называться...
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. qweryu 20.07.21 16:45 Сейчас в теме
Посмотри WebDAV_Яндекс
есть пример с постраничным запросом.

Сервер должен поддерживать эти запросы

Ссылка_На_RFC
3. EvilDoc 178 20.07.21 17:02 Сейчас в теме
(2) Именно от туда я и узнал о такой возможности. Но сервер у меня не яндекс, а minIO
4. qweryu 20.07.21 17:04 Сейчас в теме
5. EvilDoc 178 20.07.21 17:26 Сейчас в теме
(4) Да нет, не то..

Для каталогов:

Глубина 0: Получить свойства каталога
Глубина 1: как 0 + свойства всех файлов в каталоге
Глубина бесконечности: как 1 + свойства всех файлов в подкаталогах каталога (рекурсивно)

в RFC ни слова про постраничный запрос..

Нашел параметр в настройках минио - requests_deadline - попросил его увеличить, может поможет
6. qweryu 20.07.21 17:45 Сейчас в теме
(5) есть возможность раскидать файлы по папкам?
7. EvilDoc 178 21.07.21 11:22 Сейчас в теме
(6) нет.. порекомендовали попробовать некий s3 протокол.. разбираюсь - отпишусь потом для будущих поколений
8. VictorRGB2 14 30.01.23 20:19 Сейчас в теме
(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 Тогда
																// точка в имени означает, что это файл
																// без точки означает, что это имя папки
																Если лМассивФайлов.Найти(лИмяФайла) = Неопределено Тогда
																	лМассивФайлов.Добавить(лИмяФайла);
																КонецЕсли;
															КонецЕсли;
														КонецЕсли;
														Прервать;
													КонецЦикла;
												КонецЕсли;
											КонецЦикла;
										КонецЕсли;
									КонецЦикла;
								КонецЕсли;
							КонецЦикла;
						КонецЕсли;
					КонецЦикла;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот