python - 使用 Python 连接到 Sharepoint REST API
问题描述
我正在尝试使用以下代码通过应用程序使用 python 连接到共享点 -
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
site_url = 'https://redacted-admin.sharepoint.com/sites/Test'
app_principal = {
'client_id': 'redacted',
'client_secret': 'redacted',
}
context_auth = AuthenticationContext(url=site_url)
context_auth.acquire_token_for_app(client_id=app_principal['client_id'], client_secret=app_principal['client_secret'])
ctx = ClientContext(site_url, context_auth)
web = ctx.web
ctx.load(web)
ctx.execute_query()
print("Web site title: {0}".format(web.properties['Title']))
这给了我以下错误-
Traceback (most recent call last):
File "Sharepoint.py", line 17, in <module>
ctx.execute_query()
File "C:\Python\lib\site-packages\office365\sharepoint\client_context.py", line 43, in execute_query
super(ClientContext, self).execute_query()
File "C:\Python\lib\site-packages\office365\runtime\client_runtime_context.py", line 37, in execute_query
self.pending_request.execute_query()
File "C:\Python\lib\site-packages\office365\runtime\client_request.py", line 32, in execute_query
response = self.execute_request_direct(request)
File "C:\Python\lib\site-packages\office365\runtime\client_request.py", line 41, in execute_request_direct
self.context.authenticate_request(request_options)
File "C:\Python\lib\site-packages\office365\runtime\client_runtime_context.py", line 15, in authenticate_request
self.__auth_context.authenticate_request(request)
File "C:\Python\lib\site-packages\office365\runtime\auth\authentication_context.py", line 37, in authenticate_request
request_options.set_header('Authorization', self.provider.get_authorization_header())
File "C:\Python\lib\site-packages\office365\runtime\auth\acs_token_provider.py", line 76, in get_authorization_header
return 'Bearer {0}'.format(self.access_token["access_token"])
KeyError: 'access_token'
我只想在对它进行任何操作之前检查连接是否正常,有人可以帮忙吗?
解决方案
从DOCS中,您应该尝试发出这样的请求(假设 client_id 和 client_sercret)是您的用户名/密码,而不是从身份验证端点返回的其他一些 id 和令牌。
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
url = site_url = 'https://redacted-admin.sharepoint.com/sites/Test'
app_principal = {
'client_id': 'redacted',
'client_secret': 'redacted',
}
ctx_auth = AuthenticationContext(url)
if ctx_auth.acquire_token_for_user(app_principal['client_id'], app_principal['client_secret']):
ctx = ClientContext(url, ctx_auth)
web = ctx.web
ctx.load(web)
ctx.execute_query()
print "Web title: {0}".format(web.properties['Title'])
else:
print ctx_auth.get_last_error()
推荐阅读
- windows - 从 repo 克隆时,Windows 会更改符号链接文件
- kubernetes - Kubernetes 放置会导致 Pod 永远重启
- python-3.x - 删除 k 个元素后的最大不同元素
- javascript - 如何在我的 django 聊天应用程序中录制用户音频?
- c# - 通过 WinForms 执行 OpenRowset 查询时必须声明表变量“@P1select”
- kubernetes - K8S:如何删除具有 0 个副本的部署
- java - 运算符 + 未定义参数类型 char[], int
- javascript - 以最大长度限制输入
- area - 如何在 PDFLIB 中设置显示区域
- python - 本地进口和包进口有什么区别?