我在本地VM中的SharePoint 2013中有以下网站:
http://win-5a8pp4v402g/sharepoint_test/site_1/
当我从浏览器访问它时,它会提示我输入用户名和密码,然后正常工作。但是我试图在Python中使用REST API来做同样的事情。我正在使用请求库,这就是我所做的:
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/
答案 0 :(得分:28)
您的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'))
答案 1 :(得分:1)
如果其他读者也在研究使用Python和直接HTTP查询查询python列表,使用NTLM身份验证我建议你看看这里: http://blog.carg.io/listing-and-updating-a-sharepoint-list-in-python/
您将从身份验证,查询和更新Sharepoint列表中找到完整的示例。
答案 2 :(得分:0)
您还可以使用PyPI中的sharepoint模块,自称为"模块和命令行实用程序,以便从SharePoint中获取数据"
答案 3 :(得分:0)
以下是从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")
答案 4 :(得分:-2)
401响应是authentication错误......
这使得您的三个变量之一不正确: url,user,pass 。 Requests Authentication Docs
您的网址看起来不完整。