【问题标题】:Downloading a Text File from a Public Sharepoint Link using Requests in Python使用 Python 中的请求从公共 Sharepoint 链接下载文本文件
【发布时间】:2021-11-28 17:52:39
【问题描述】:

我正在尝试从通过电子邮件发送给我的共享链接自动下载文本文件。原始链接指向一个包含两个文件的文件夹,但我得到了我需要的文件的直接下载链接:

https://'abc'-my.sharepoint.com/personal/gamma_'abc'/_layouts/15/download.aspx?UniqueId=a0db276e%2Ddf75%2D49b7%2Db671%2D1c49e365ef3f

当我在网络浏览器中输入上述网址时,我会弹出打开或下载文件的选项。我正在尝试编写一些 Python 代码来自动下载文件,这就是我到目前为止所想出的

import requests

url = "https://<abc>-my.sharepoint.com/personal/gamma_<abc>/_layouts/15" \
      "/download.aspx?UniqueId=a0db276e%2Ddf75%2D49b7%2Db671%2D1c49e365ef3f "

hdr = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0',
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
       'Accept-Encoding': 'gzip, deflate, br',
       'Accept-Language': 'en-US,en;q=0.5',
       'Upgrade-Insecure-Requests': '1',
       'Sec-Fetch-Dest': 'document',
       'Sec-Fetch-Mode': 'navigate',
       'Sec-Fetch-Site': 'none',
       'Sec-Fetch-User': '?1',
       'Connection': 'keep-alive'}

myfile = requests.get(url, headers=hdr)

open('c:/users/scott/onedrive/desktop/gamma.las', 'wb').write(myfile.content)

我最初尝试不使用用户代理,当我打开 gamma.las 时,文件中只有 403 FORBIDDEN。如果我也发送标头,则该文件包含看起来像 Microsoft 登录页面的 HTML,所以我假设我缺少一些身份验证步骤。

我与这个组织没有任何关系——有人通过电子邮件向我发送了这个链接,让我下载一个文本文件,该文件可以通过浏览器正常工作,但不能通过 Python。我没有登录任何东西来获取它,因为我没有此域的用户名或密码。

我可以使用请求来做到这一点吗?如果没有,我是否可以在没有用户凭据的情况下使用该公司的 Sharepoint 的 REST API?

【问题讨论】:

    标签: python sharepoint python-requests download


    【解决方案1】:

    不提供您的凭据很可能意味着您(隐含地)在您的组织中使用内置的 Windows 身份验证。看看这是否有帮助:Handling windows authentication while accessing url using requests

    那里提到的用于处理内置 Windows 身份验证的 python 库是requests-negotiate-sspi。不确定,它是否适用于联邦(您的网站以“.sharepoint.com”结尾,这意味着您可能也在使用联邦),但可能值得一试。

    所以,我会尝试这样的事情(我怀疑标题在你的情况下真的很重要,但你也可以尝试添加它们)

    import requests
    from requests_negotiate_sspi import HttpNegotiateAuth
    
    url = ...
    
    myfile = requests.get(url, auth=HttpNegotiateAuth())
    

    【讨论】:

    • 感谢您的尝试,但这并没有改变 - 403 FORBIDDEN 没有标题和发送标题时登录页面的 HTML。
    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 2014-02-14
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2019-01-17
    相关资源
    最近更新 更多