2017-02-08 18 views
0

Я пытаюсь использовать python urllib2 для доступа к файлам в папке SharePoint 2013 с использованием API REST SharePoint. https://msdn.microsoft.com/en-us/library/office/dn450841.aspxПолучить объект JSON из запроса python urllib2

Я не могу получить ответ как объект json даже после добавления заголовка 'accept': 'application/json; odata = verbose'.

Я использую Python 2.7.5, urllib2 и не может использовать python-запросы из-за ограничений и ограничений разрешений.

Если я использую .../_ api/web/GetFolderByServerRelativeUrl ('/ File Name')/url файлов Я получаю AttributeError (объект 'str' не имеет атрибута'read '"). Если я просто использую обычный URL-адрес сайта, я получаю сообщение об ошибке, что в ответе нет объекта JSON.

Я не знаю, что я делаю неправильно, и почему я не могу получить ни одного json от этого запроса?

import sys 
    import urllib 
    import urllib2 
    import json 
    from ntlm import HTTPNtlmAuthHandler 


    try: 
     url = 'https://sharepointsite/subfolder/subfolder/subfolder/Forms/AllItems.aspx/_api/web/GetFolderByServerRelativeUrl(/Folder Name)/Files' 

     user = r'DOMAIN\USER' 
     password = '*********' 

     req = urllib2.Request(url) 
     req.add_header('accept', 'application/json;odata=verbose') 

     passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
     passman.add_password(None, url, user, password) 

     handler = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman) 
     opener = urllib2.build_opener(handler) 
     urllib2.install_opener(opener) 

     response = urllib2.urlopen(req) 
     data_json = json.load(response.read()) 

    except Exception as e: 
     print '{0}'.format(e) 

ответ

0

Что действительно возвращает запрос, является строковым представлением объекта json.

Вы можете использовать функцию json.loads() вместо функции json.load(), чтобы преобразовать строку в объект json.

+0

Я изменил его, чтобы использовать функцию 'json.loads()', и я получаю ValueError («Объект JSON не может быть декодирован»,) Я понимаю, что ответ SharePoint по умолчанию соответствует xml, но я подумал, добавив заголовок к запросу это вернет json? – bighill

+0

Вы пробовали распечатать результат 'response.read()', чтобы посмотреть, как он выглядит? –

+0

Да, это строка html – bighill