如何使用easywebdav通过python连接到owncloud?

Qua*_*mis 5 python webdav owncloud

我正在尝试owncloud使用 python连接到一个实例。我发现easywebdav通过 webdav 连接应该很容易,但是在尝试连接时我收到“404 Not Found”

import easywebdav
webdav = easywebdav.connect('test.org/owncloud/remote.php/webdav/', username='user', password='pass', protocol='https', port=443, verify_ssl=False)
print webdav.ls(".")
Run Code Online (Sandbox Code Playgroud)

我希望在我自己的云实例上找到一个文件列表,但我得到了

python ./test.py 
Traceback (most recent call last):
File "./test.py", line 8, in <module>
    print webdav.ls(".")
File "/usr/lib/python2.7/site-packages/easywebdav-1.0.7-py2.7.egg/easywebdav/client.py", line 131, in ls
    response = self._send('PROPFIND', remote_path, (207, 301), headers=headers)
File "/usr/lib/python2.7/site-packages/easywebdav-1.0.7-py2.7.egg/easywebdav/client.py", line 81, in _send
    raise OperationFailed(method, path, expected_code, response.status_code)
easywebdav.client.OperationFailed: Failed to list directory ".".
Operation     :  PROPFIND .
Expected code :  207 UNKNOWN, 301 Moved Permanently
Actual code   :  404 Not Found
Run Code Online (Sandbox Code Playgroud)

我觉得奇怪的是,如果我连接到一个无效的路径,

webdav = easywebdav.connect('test.org/owncloud-not-existent/', ......)
Run Code Online (Sandbox Code Playgroud)

我得到

Traceback (most recent call last):
File "./test.py", line 8, in <module>
    print webdav.ls(".")
File "/usr/lib/python2.7/site-packages/easywebdav-1.0.7-py2.7.egg/easywebdav/client.py", line 131, in ls
    response = self._send('PROPFIND', remote_path, (207, 301), headers=headers)
File "/usr/lib/python2.7/site-packages/easywebdav-1.0.7-py2.7.egg/easywebdav/client.py", line 81, in _send
    raise OperationFailed(method, path, expected_code, response.status_code)
easywebdav.client.OperationFailed: Failed to list directory ".".
Operation     :  PROPFIND .
Expected code :  207 UNKNOWN, 301 Moved Permanently
Actual code   :  405 Method Not Allowed
Run Code Online (Sandbox Code Playgroud)

Rob*_*rto 3

我用个人WebDav服务器进行了测试,发现了类似的问题,虽然我认为我的easywebdav版本不同,我使用v1.0.7并且参数verify_ssl不允许,所以我用“http”进行了测试。

无论如何,我必须重现您的问题,要修复它,请更改连接 url 并仅使用主机,将路径放入命令中ls()

import easywebdav
webdav = easywebdav.connect('test.org', username='user', password='pass', protocol='https', port=443, verify_ssl=False)
print webdav.ls("/owncloud/remote.php/webdav")
Run Code Online (Sandbox Code Playgroud)