如何通过 Python 中的 REST API 访问共享点站点?
Posted
技术标签:
【中文标题】如何通过 Python 中的 REST API 访问共享点站点?【英文标题】:How to access a sharepoint site via the REST API in Python? 【发布时间】:2014-01-23 14:41:40 【问题描述】:我在本地 VM 中的 SharePoint 2013 中有以下网站:
http://win-5a8pp4v402g/sharepoint_test/site_1/
当我从浏览器访问它时,它会提示我输入用户名和密码,然后就可以正常工作了。但是我正在尝试使用 Python 中的 REST API 来做同样的事情。我正在使用 requests 库,这就是我所做的:
import requests
from requests.auth import HTTPBasicAuth
USERNAME = "Administrator"
PASSWORD = "password"
response = requests.get("http://win-5a8pp4v402g/sharepoint_test/site_1/", auth=HTTPBasicAuth(USERNAME, PASSWORD))
print response.status_code
但是我得到了 401。我不明白。我错过了什么?
注意:我关注了这篇文章http://tech.bool.se/using-python-to-request-data-from-sharepoint-via-rest/
【问题讨论】:
【参考方案1】:您的 SharePoint 网站可能使用不同的身份验证方案。您可以通过检查 Firebug 或 Chrome 开发者工具中的网络流量来检查这一点。
幸运的是,请求库支持许多身份验证选项:http://docs.python-requests.org/en/latest/user/authentication/
例如,我需要访问的网络之一使用 NTLM 身份验证。安装requests-ntml 插件后,我可以使用类似下面的代码访问该站点:
import requests
from requests_ntlm import HttpNtlmAuth
requests.get("http://sharepoint-site.com", auth=HttpNtlmAuth('DOMAIN\\USERNAME','PASSWORD'))
【讨论】:
它就像一个魅力。 HttpNtlmAuth(uid, pwd) 解决了这个问题。它用于我需要此代码的 Intranet 共享点。感谢分享。 我收到来自 Intranet 和 Internet 的以下是从 Python 调用 SharePoint 2016 REST API 以创建网站的示例。
import requests,json,urllib
from requests_ntlm import HttpNtlmAuth
root_url = "https://sharepoint.mycompany.com"
headers = 'accept': "application/json;odata=verbose","content-type": "application/json;odata=verbose"
##"DOMAIN\username",password
auth = HttpNtlmAuth("MYCOMPANY"+"\\"+"UserName",'Password')
def getToken():
contextinfo_api = root_url+"/_api/contextinfo"
response = requests.post(contextinfo_api, auth=auth,headers=headers)
response = json.loads(response.text)
digest_value = response['d']['GetContextWebInformation']['FormDigestValue']
return digest_value
def createSite(title,url,desc):
create_api = root_url+"/_api/web/webinfos/add"
payload = 'parameters':
'__metadata': 'type': 'SP.WebInfoCreationInformation' ,
'Url': url,
'Title': title,
'Description': desc,
'Language':1033,
'WebTemplate':'STS#0',
'UseUniquePermissions':True
response = requests.post(create_api, auth=auth,headers=headers,data=json.dumps(payload))
return json.loads(response.text)
headers['X-RequestDigest']=getToken()
print createSite("Human Resources","hr","Sample Description")
【讨论】:
我正在获取 headers['X-RequestDigest']=getToken() 如下:KeyError: 'd',在公司网络内测试它【参考方案3】:您还可以使用 PyPI 中的 sharepoint 模块,自称为“从 SharePoint 中获取数据的模块和命令行实用程序”
【讨论】:
我今天找到了这个选项。问题:通过 python 库输入凭据是否存在安全风险? 与任何其他开源库相同。如果您审核代码并认真处理密码,那么您就足够安全了。【参考方案4】:401 响应是 authentication 错误...
这会使您的三个变量之一不正确:url、user、pass。 Requests Authentication Docs
您的网址看起来不完整。
【讨论】:
是的,我知道这是一个拒绝访问错误。重点是我已经验证了url、用户名和密码是正确的。 没关系。它是一个共享点站点。我在 /etc/hosts 文件中添加了该条目以指向本地 VM 的 IP。无论如何,为了清楚起见,我已经更新了网址。以上是关于如何通过 Python 中的 REST API 访问共享点站点?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Rest API Python 包装器和 WooCommerce Shipment Tracking 插件插入货运跟踪代码
ActiveCollab REST API 使用 Python 接收的嵌套 JSON 中的访问值 [已解决]
如何通过 REST API 更新 Grafana 面板中的指标值