Я пытаюсь читать / записывать элементы списка SharePoint через python
Я написал ниже, что успешно читает подробности SharePoint в качестве ответа
import requests
from requests_ntlm import HttpNtlmAuth
requests.packages.urllib3.disable_warnings() # suprress all SSL warnings
url = "https://sharepoint.company.com/_api/web/lists/getbytitle('listname')/items?$top=3&$select=ID,Title,Notes" # just reading 3 columns
headers = {'accept': 'application/xml;q=0.9, */*;q=0.8'}
response = requests.get(url, headers=headers, auth=HttpNtlmAuth('domain\\username','Password'), verify=False, stream=True)
Теперь, когда я пытаюсь обновитьодин из элементов, я получаю response 403
ошибка
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
json_data = [{ '__metadata': { 'type': 'SP.List' }, 'Notes': 'Test Note' }]
response = requests.post(url, { '__metadata': { 'type': 'SP.List' }, 'Notes': 'Test Note' }, headers = self.headers, auth=HttpNtlmAuth('domain\\username','Password'), verify=False)
Microsoft SharePoint говорит, что X-RequestDigest: form digest value
должен быть отправлен в заголовках.
После прочтения статей нашел следующий код для получения form digest value
:
site_url = "https://sharepoint.company.com"
login_user = 'domain\\username'
auth = HttpNtlmAuth(login_user, 'PASSWORD')
sharepoint_contextinfo_url = self.site_url + '/_api/contextinfo'
headers = {
'accept': 'application/json;odata=verbose',
'content-type': 'application/json;odata=verbose',
'odata': 'verbose',
'X-RequestForceAuthentication': 'true'
}
r = requests.post(sharepoint_contextinfo_url, auth=auth, headers=headers, verify=False)
form_digest_value = self.r.json()['d']['GetContextWebInformation']['FormDigestValue']
Но я не получаю form_digest_value
Я пытался получить доступ кcontext info
через браузер, как https://sharepoint.company.com/_api/contextinfo
и получил ниже ошибку:
<?xml version="1.0" encoding="UTF-8"?>
-<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<m:code>-1, Microsoft.SharePoint.Client.ClientServiceException</m:code>
<m:message xml:lang="en-US">The HTTP method 'GET' cannot be used to access the resource 'GetContextWebInformation'. The operation type of the resource is specified as 'Default'. Please use correct HTTP method to invoke the resource.</m:message>
</m:error>
Может кто-нибудь, пожалуйста, помогите, как получить значение дайджеста формы?Или есть какой-нибудь способ обновить элемент списка SharePoint?
Заранее спасибо!
Обновлено
После прочтения этой статьи , Я могу понять, что мы можем получить значение __REQUESTDIGEST из Page source
.При обновлении страницы каждую минуту, можно увидеть значение отличается.Как я могу получить значение дайджеста запроса через Python и сохранить его хотя бы в течение 5 минут?