【问题标题】:Get JSON object from Python urllib2 request从 Python urllib2 请求中获取 JSON 对象
【发布时间】:2017-02-09 07:46:24
【问题描述】:

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

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

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

如果我使用 .../_api/web/GetFolderByServerRelativeUrl('/File Name')/Files url,我会得到一个 AttributeError("'str' object has no attribute'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)

【问题讨论】:

    标签: python json sharepoint-2013 urllib2


    【解决方案1】:

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

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

    【讨论】:

    • 我修改它以使用 json.loads() 函数,我得到 ValueError('No JSON object could be decoded',) 我知道 SharePoint 响应默认为 xml,但我想通过将标题添加到请求它会返回 json 吗?
    • 你有没有试过打印出response.read()的结果来看看它是什么样子的?
    • 是的,它是 html 字符串
    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 2018-02-04
    • 2014-08-23
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多