【问题标题】:Problems while connecting to WebDav using Python使用 Python 连接到 WebDav 时出现问题
【发布时间】:2017-01-21 01:57:59
【问题描述】:

我以前从未使用过 WebDav,但最近我的客户要求我将一些文件上传到他的服务器。这个过程应该是自动化的,所以我决定使用 python 来做这个

我的客户以以下格式向我提供了有关服务器的信息:

服务器位置:\123.456.789.012\Something

用户名:用户

密码:通过

域:某个域

我正在尝试使用easywebdav 框架来完成这项工作,但是我得到了以下结果: 代码:

webdav = easywebdav.connect(
    host='123.456.789.012/Something',
    username='user',
    port=80,
    protocol="http",
    password='pass'
)

print(webdav.ls())

我得到的例外是

操作:PROPFIND。

预期代码:207 多状态,301 永久移动

实际代码:401 Unauthorized

我可能没有正确理解所有内容,因为我已经尝试了多个框架并且它们都以相同的方式失败,但是我已经通过 MAC OS X webdav 客户端内置的 Finder 使用相同的凭据成功连接到服务器,所以它确实有效正确。

我很抱歉问题的格式可能缺乏细节,在尝试解决这个问题几个小时后,我现在很绝望。随时在 cmets 中提出任何问题!

【问题讨论】:

  • 你好,可以试试webdav = easywebdav.connect( host='123.456.789.012', username='user', port=80, protocol="http", password='pass', path='/something' )吗?
  • @piotr-dawidiuk 我们取得了一些进展。对于webdav.ls(),即webdav.ls("."),我再次收到错误500,对于webdav.ls("/Something"),我再次收到错误401。有什么想法吗?
  • 更新:500 似乎是一个问题。现在我得到任何路径的 401。

标签: python python-3.x http webdav


【解决方案1】:

找到了我的问题的解决方案。在使用 Wireshark 了解我的 OS X(WebdavFS)如何连接后,我发现服务器是 Microsoft IIS 7.5,并且需要 NTLM Auth 而不是 Basic Auth。幸运的是,还没有找到任何支持 NTLM Auth 的 python 库,因为该应用程序相对较小,我使用 neon library 切换到 C++。

【讨论】: