如何通过Python中的RESTAPI访问sharepoint站点?
我在本地VM中的SharePoint 2013中有以下站点:如何通过Python中的RESTAPI访问sharepoint站点?,python,rest,authentication,sharepoint,sharepoint-2013,Python,Rest,Authentication,Sharepoint,Sharepoint 2013,我在本地VM中的SharePoint 2013中有以下站点: http://win-5a8pp4v402g/sharepoint_test/site_1/ 当我从浏览器访问它时,它会提示我输入用户名和密码,然后工作正常。然而,我正试图在Python中使用RESTAPI来实现同样的目标。我正在使用请求库,这就是我所做的: import requests from requests.auth import HTTPBasicAuth USERNAME = "Administrator" PAS
http://win-5a8pp4v402g/sharepoint_test/site_1/
当我从浏览器访问它时,它会提示我输入用户名和密码,然后工作正常。然而,我正试图在Python中使用RESTAPI来实现同样的目标。我正在使用请求库,这就是我所做的:
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。我不明白。我错过了什么
注意:我跟随了这篇文章,401响应是一个错误
这使得三个变量中的一个变量不正确:url、user、pass
您的url看起来不完整。您的SharePoint网站可能使用了不同的身份验证方案。您可以通过检查Firebug或Chrome开发者工具中的网络流量来检查这一点 幸运的是,请求库支持许多身份验证选项: 例如,我需要访问的一个网络使用NTLM身份验证。安装插件后,我可以使用类似以下代码访问该网站:
import requests
from requests_ntlm import HttpNtlmAuth
requests.get("http://sharepoint-site.com", auth=HttpNtlmAuth('DOMAIN\\USERNAME','PASSWORD'))
您还可以使用PyPI中的模块,自述为“从SharePoint获取数据的模块和命令行实用程序”下面是一个从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")
是的,我知道这是一个拒绝访问的错误。重点是我已经验证了url、用户名和密码是正确的。没关系。它是一个sharepoint网站。我在/etc/hosts文件中添加了该条目,以指向本地VM的IP。不管怎样,为了清晰起见,我已经更新了网址。它就像一个符咒。HttpNtlmAuth(uid,pwd)解决了这个问题。它适用于我需要此代码的内部网sharepoint。谢谢分享。我是从内联网和互联网上得到的。知道如何解决吗?Thx以防有人将NTLM锁定在他/她的公司:也可以选择使用请求协商sspi包。有关这些选项的概述,请参阅。我正在获取标题['X-RequestDigest']=getToken(),如下所示:KeyError:'d',在公司网络中进行测试我今天找到了此选项。问题:通过python库输入凭据是否存在任何安全风险?与任何其他开源库一样。如果你仔细检查代码并处理密码,你就足够安全了。