使用python请求从Nextcloud下载目录(WebDav)

2024-06-16 10:00:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个nextcloud实例,并尝试使用库请求下载一个带有API调用的目录

我可以使用API调用下载zip文件。现在我想要的是在我的nextcloud实例上有一个解压缩的目录,并通过API调用下载它当我调用API时,如果我得到一个zip文件,这对我来说并不重要,我只想让它在云中解压

例如,我可以将一个解压缩的目录放在那里,当我在浏览器中下载它时,nextcloud会返回一个zip文件。我希望在API调用中使用这种行为

现在,如果我在那里放一个压缩文件,我可以像这样下载文件:

import os
import requests


response = requests.request(
        method="get",
        url=f"https://mycloud/remote.php/dav/files/setup_user/{name_dir}/",
        auth=("my_user", my_token),
    )

    if response.status_code == 200:
        with open("/path/to/my/dir/file_name.zip"), "wb") as file:
            file.write(response.content)

这会将云中的zipfile写入本地文件_name.zip文件。我现在的问题是,如果我在云中有一个解压目录,它就不工作了。不起作用意味着我得到了一个包含以下内容的文件:

This is the WebDAV interface. It can only be accessed by WebDAV clients such as the Nextcloud desktop sync client.

我也试着用wgetwget --recursive --no-parent https://path/to/my/dir来做这件事,我得到了同样的文件和同样的内容

因此,我假设nextcloud的WebDav API不允许我以我想要的方式进行操作。我并不想知道我做错了什么,或者我想要的东西是否可行。我也不明白为什么在浏览器中这样做很好。我只需选择解压后的文件夹,点击即可下载。在nextcoud社区中,有人建议使用Rclonehttps://help.nextcloud.com/t/download-complete-directory-from-nextcloud-instance/77828),但我不希望使用必须在我想要运行此代码的每台机器上设置的依赖项

非常感谢您的帮助!提前多谢

PS:如果有人想知道我为什么要这样做:如果我只想在云中更改dir中的一个文件,那么这样做会更方便。否则我必须解压,更改文件,再次压缩和上传


Tags: 文件实例namehttpsimport目录apiresponse