Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Python中的RESTAPI访问sharepoint站点?_Python_Rest_Authentication_Sharepoint_Sharepoint 2013 - Fatal编程技术网

如何通过Python中的RESTAPI访问sharepoint站点?

如何通过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

我在本地VM中的SharePoint 2013中有以下站点:

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库输入凭据是否存在任何安全风险?与任何其他开源库一样。如果你仔细检查代码并处理密码,你就足够安全了。