从Python urllib2请求中获取JSON对象

时间:2017-02-08 23:36:06

标签: python json sharepoint-2013 urllib2

我正在尝试使用python urllib2使用SharePoint REST API访问SharePoint 2013文件夹中的文件。 https://msdn.microsoft.com/en-us/library/office/dn450841.aspx

即使在添加标题'accept'后,我似乎无法将响应作为json对象获取:'application / json; odata = verbose'。

由于限制和权限限制,我使用的是Python 2.7.5,urllib2和无法使用python请求模块。

如果我使用... / _ api / web / GetFolderByServerRelativeUrl('/ File Name')/ Files url,我会得到一个AttributeError(“'str'对象没有属性'read'”)。如果我只是使用网站的普通网址,我会收到一条错误,即响应中没有“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)

1 个答案:

答案 0 :(得分:0)

请求实际返回的是json对象的字符串表示形式。

您可以使用json.loads()函数代替json.load()函数,以便将字符串转换为json对象。