使用启用了 2 因素身份验证的 python 脚本从 nextcloud 下载文件

Downloading files from nextcloud with python script with 2-factor authentication enabled

我设置了一个 nextcloud 实例,我想使用 python 脚本从那里下载文件。我的 nextcloud 实例对所有用户强制执行双因素身份验证,我希望它保持这种状态。

我梦想的场景是使用 requests 库,所以按照这里的文档 https://docs.nextcloud.com/server/15/developer_manual/client_apis/WebDAV/basic.html ,我尝试做这样的事情:

from requests.auth import HTTPBasicAuth

r = requests.request(
    method='get',
    url='https://mycloudinstance/index.php/apps/files/?dir=/Test&fileid=431',
    auth=('username', 'pass')
)
print(r.status_code)
print(r.text)

这给了我一个 401 错误,说 {"message":"Current user is not logged in"}。

当我将上面的 URL 更改为 https://remote.php/dav/myinstance/index.php/apps/files/?dir=/Test&fileid=431 我得到

ConnectionError(': Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))

作为替代方案,我尝试尝试使用这个库 https://github.com/owncloud/pyocclient 只是为了看看我是否可以用它创建一个测试文件夹(它来自 owncloud 但也应该与 nextcloud 一起工作):

import owncloud
oc = owncloud.Client('https://mycloudinstance')
oc.login('username', 'pass')
oc.mkdir('cooldir')

这会引发 owncloud.owncloud.HTTPResponseError: HTTP error: 401 错误。我认为这可能是因为我使用不当或因为 2 因素身份验证。

我不确定如何将 webdav 协议与 python 请求库结合使用,而且我也不确定如何获得双重授权才能使用它。有人做过吗?

非常感谢您的帮助,在此先致谢。

您可以通过为单个应用程序生成安全密码来绕过双因素身份验证。

在下一个云中,转到:设置 -> 个人 -> 安全 -> 创建新的应用程序密码

密码将显示给您一次(且仅显示一次),请在您的脚本中使用它代替您的普通密码。