WebDAV — это расширение протокола HTTP, описанное в RFC4918 . WebDAV добавляет в HTTP возможность загружать файлы на сервер, а также удалять / перемещать их, и так далее. В итоге мы получаем что-то очень похожее на FTP , или даже на сетевую файловую систему типа NFS или Samba . Давайте же выясним, как этим пользоваться.
Настойка WebDAV-сервера
В качестве примера рассмотрим настройку обычного, доступного всему миру, веб-сервера, но на который авторизованные пользователи могут еще и заливать файлы по WebDAV. Примем за рабочую теорию, что у вас уже есть сервер под управлением Ubuntu, на котором поднят Nginx с прикрученным к нему Let’s Encrypt .
Далее говорим:
Правим /etc/nginx/sites-enabled/default примерно таким образом:
charset UTF-8;
server_name afiskon.ru;
listen 127.0.0.1:443 ssl
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
try_files $uri $uri/ =404;
root /home/afiskon/afiskon.ru;
location /public/ {
autoindex on;
}
index index.html index.htm;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
dav_access user:rw group:r all:r;
client_max_body_size 100m;
create_full_put_path on;
limit_except GET {
auth_basic «Restricted»;
auth_basic_user_file /home/afiskon/.webdav_htpasswd;
}
}
}
У вас пути вряд ли будут такими. Файлы будут жить где-то в /var/www/html.
Создаем файл с логинами-паролями:
htpasswd -c .webdav_htpasswd afiskon
chown afiskon:www-data .webdav_htpasswd
chmod 740 .webdav_htpasswd
Важно! Не кладите файл туда, где он будет доступен по WebDAV. В этом случае его сможет просмотреть любой авторизованный пользователь, несмотря на точку в начале имени файла.
Убедимся, что все файлы и каталоги имеют правильные права:
sudo chmod -R 775 . / afiskon.ru /
Просим веб-сервер перечитать конфиг:
Вот и вся настойка!
Работа с WebDAV через curl
Получить список доступных методов:
Получить список файлов и каталогов в XML:
Загрузить файл:
Переместить или переименовать файл:
—user afiskon https: // afiskon.ru / old.txt
Создать новую директорию:
Удалить файл или каталог:
curl -v -X DELETE —user afiskon https: // afiskon.ru / some-file.txt
Таким образом, какие-то простые операции с WebDAV достаточно комфортно можно делать даже на bash.
Работа с WebDAV на Python
Но на bash мы, конечно же, ничего писать не будем. Вместо этого воспользуемся нормальным скриптовым языком . Как обычно, не засорять систему лишними пакетами поможет virtualenv .
Воспользуемся пакетом webdavclient3 :
Создание нового клиента:
>>> from webdav3.client import Client
>>> options = {
… ‘webdav_hostname’: ‘https://afiskon.ru’,
… ‘webdav_login’: ‘afiskon’,
… ‘webdav_password’: ‘s3cr3t’
… }
>>> client = Client(options)
Посмотреть файлы и каталоги:
[‘file1.txt’, ‘file2.txt’ ‘dir1/’, ‘dir2/’]
Получить информацию по файлу или каталогу:
{‘created’: ‘2020-01-23T12:34:56Z’, ‘name’: ‘file1.txt’, ‘size’: ⏎
‘123456’, ‘modified’: ‘Thu, 23 Jan 2020 12:34:56 GMT’, ‘etag’: »}
>>> client.is_dir(‘file1.txt’)
False
Залить файл на сервер:
Скачать файл с сервера:
Переместить или переименовать:
Создать директорию:
True
Удалить файл или директорию:
Заметьте, что когда вы хотите сделать действие с директорией, на конце ее имени обязательно должен быть слэш.
Десктоп-клиенты
В MacOS можно подключиться к WebDAV через Finder. Однако на момент написания этих строк он умел работать только в режиме чтения и заметно подтормаживал.
Как достойную замену можно порекомендовать бесплатную программу Cyberduck . Программа умеет работать не только с WebDAV, но также и с FTP, SFTP, S3, Google Drive, Dropbox и много чем еще. Cyberduck работает под Windows и MacOS. Существует консольный вариант под названием duck . Он работает еще и под Linux. Для тех, кому очень хочется виртуальный жесткий диск, есть вариация под названием Mountain Duck , но только за деньги.
Если Cyberduck вам по каким-то причинам не подошел, рассмотрите альтернативу в лице Transmit . Касаемо текущей ситуации с клиентами под Linux лучше всего обратиться к соответствующей странице на Arch Linux Wiki.
Существуют также мобильные клиенты. Впрочем, я их особо не изучал. Заинтересованным читателям предлагается исследовать этот вопрос самостоятельно.
Заключение
Как видите, с WebDAV трудно соревноваться в простоте. WebDAV может быть неплохим выбором, если вы хотите сделать небольшую файлопомойку на Raspberry Pi . Или, например, вам нужен обычный статический сайт. Но чтобы страницы на нем время от времени обновлялись скриптами, которые запускаются по расписанию в GitHub Actions . В общем, звучит как что-то, что полезно держать на вооружении.