Загрузите файл NextCloud, используя API WebDav и запросы Python - PullRequest
0 голосов
/ 29 октября 2019

У меня есть файл уценки на сервере NextCloud 15 в MyDirectory/.

До сих пор я был в состоянии перечислить MyDirectory/ содержимое, несмотря на то, что документация не очень соответствует тому, чтона самом деле работает.

Например, я использую https://cloud.example.com/remote.php/webdav/folder вместо https://cloud.example.com/remote.php/dav/files/username/folder, как сказано в документе. Мой (рабочий) код:

import requests
import xmltodict

webdav_options = """<?xml version="1.0" encoding="UTF-8"?>
            <d:propfind xmlns:d="DAV:">
                <d:prop xmlns:oc="http://owncloud.org/ns">
                    <d:getlastmodified/>
                    <d:getcontenttype/>
                    <oc:fileid/>
                </d:prop>
            </d:propfind>"""

r = requests.request('PROPFIND', 'https://my-domain.com/nextcloud/remote.php/webdav/MyDirectory',
                     auth=('username', 'password'),
                     data=webdav_options
                     )

xml_dict = xmltodict.parse(r.text, dict_constructor=dict)

for response in xml_dict['d:multistatus']['d:response']:
    filename = unquote(response['d:href']).replace(
        '/nextcloud/remote.php/webdav/', '')
    print(filename) # Working great

Теперь я хочу скачать файлы. В соответствии с документацией , найденной здесь не работает ... Попытка этого только загружает HTML-страницу:

url = f'https://my-domain.com/nextcloud/remote.php/webdav/MyDirectory/{filename}'
my_file = requests.get(url, auth=(usernanme, password))
print(my_file.content) # html content

Есть идеи, как поступить?

...