Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Сетевое программирование > PROPPATCH протокола WebDAV – как настроить параметры?


Автор: мыш 30.09.22, 20:24
Друзья. Нигде не могу найти хоть какой-нибудь информации о методе PROPPATCH. Подскажите как правильно передать требуемые параметры? Список конкретных вопросов в конце.

ЗАДАЧА:
Получить в ответ от сервера https://webdav.yandex.ru/ публичную ссылку на файл, хранящийся на яндекс-диске.

БИБЛИОТЕКА:
Synaps

УДАЛОСЬ СДЕЛАТЬ:
Реализовать метод MKCOL. Успешно создаются папки.

Код:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Var
      HTTP : THTTPSend; // class(TSynaClient) модуля unit httpsend;
      CatName: string;
    with HTTP do
      begin
        Headers.Clear; // очищаем заголовки, если ранее были заполнены другим запросом
        Headers.Add('Authorization: Basic ' + FToken); // FToken – зашифрованные пароль и логин,
        Headers.Add('Accept: */*'); // хрен знает что такое
        CatName := ‘Тестовый каталог’;
        URL := ‘https://webdav.yandex.ru/’+ CatName;
        if HTTPMethod('MKCOL', URL) then
          showmessage(‘Каталог создан’);
    End;


ОПИСАНИЕ МЕТОДА ОТ ЯНДЕКС
https://yandex.ru/dev/disk/doc/dg/reference/publish.html

Публикация файлов и папок
Файлы и папки, загруженные на Яндекс.Диск, можно опубликовать: сгенерировать ссылку, по которой они будут доступны не только владельцу Диска.
Опубликованным файлам и папкам можно вернуть статус личных — сгенерированные публичные ссылки перестанут работать.
Признак публичности устанавливается и редактируется с помощью метода PROPPATCH. Чтобы опубликовать файл или папку, свойству public_url в пространстве имен urn:yandex:disk:meta следует присвоить любое непустое значение.

Пример публикации папки
Публикуется папка /public_folder/, расположенная в корневом каталоге Диска пользователя.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    PROPPATCH /public_folder/ HTTP/1.1
    User-Agent: my_application/0.0.1
    Host: webdav.yandex.ru
    Authorization: OAuth 0c4182a7c2cf4521964a72ff57a34a07
    Content-Length: 158
     
    <propertyupdate xmlns="DAV:">
      <set>
        <prop>
          <public_url xmlns="urn:yandex:disk:meta">true</public_url>
        </prop>
      </set>
    </propertyupdate>


ЧТО Я ХОЧУ ВООБЩЕ:
Написать клиента для яндекс-диска. В описаниях яндекса все что нужно есть, но мне нужно научится «переводить» требования описанные в описании яндекс API на язык дельфи.

ВОПРОСЫ
  1. На каком языке написан пример яндекса?
  2. Что такое пространство имен urn:yandex:disk:meta ?
  3. Изменения в пространстве имен нужно декларировать в заголовках класса или в теле запроса (в ссылке)?
  4. Как конкретно задать этому пространству имен значение? Пример строки в URL или в параметре класса.
  5. Как посмотреть что отсылает браузер серверу при нажитии на кнопку «получить ссылку на файл»? (подозреваю что анализ запросов – единственный способ изучения темы в отсутствие примеров.
  6. Что почитать на эту тему чтобы досконально разобраться в этом? Я раньше никогда не программировал для вэб, но хочу научиться.

Автор: мыш 01.10.22, 09:33
Разобрался сам. Ответы:
1. xml
2. вопрос актуален
3. В теле
4. Нужно в тело добавить код, приведенный в яндекс-примере
5. вопрос актуален
6. Спецификации протоколов hhtp и webDav

Автор: Fr0sT 10.10.22, 07:24
2 - приблуда xml, не заморачивайся
5 - консоль веб-разработчика, вкладка Network

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)