我正在尝试使用Python脚本从SharePoint存储库下载Excel文件。我正在使用https://github.com/vgrem/Office365-REST-Python-Client示例中定义的Office365-Rest-Python-Client,我可以访问我需要的所有文件/目录。当我想下载任何文件时出现问题。我尝试了几种方法,但它们都不起作用:wget.download("https://shprepos.com/path/file.xlsx", local_path, bar=None)
但是我得到了“403 FORBIDDEN”错误。我也尝试过请求:
req = requests.get(ruta, auth=requests.auth.HTTPBasicAuth(username, password), headers=headers)
with open(local_file, 'wb') as file:
file.write(req.content)
使用这段代码,我得到的是网页,而不是excel文件,我不知道为什么,因为如果我访问网址“https://shprepos.com/path/file.xlsx”,我会通过正确的身份验证下载文件。
您是否知道使用身份验证使用wget下载该文件的方法?或者我在requests.get中做错了什么?
我需要一种获取该文件的方法,使用我在脚本开头时执行的先前身份验证:
ctx_auth = AuthenticationContext(shp_url)
token = ctx_auth.acquire_token_for_user(username, password)
你知道这样做的方法吗?也许python客户端有一个下载文件的方法,但我找不到它!
非常感谢! :)
此致
答案 0 :(得分:2)
是的!我找到了解决方案!!在下载文件之前,我需要获得授权。我在Office365-Python-Client的test文件夹中找到了一个示例。所以基本上,在获取请求的url之前,您将获得授权:
options = RequestOptions(shp_file_path)
ctx_auth.authenticate_request(options)
options.headers["X-FORMS_BASED_AUTH_ACCEPTED"] = "f"
options.headers["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0)"
req = requests.get(shp_file_path, headers=options.headers, verify=True, allow_redirects=True)
if req.ok:
with open(local_file, 'wb') as file:
file.write(req.content)
如果您没有获得auth_request并添加标头,则无法获取该文件。
希望将来帮助某人为我工作! 任何改进都非常受欢迎!! :)