zoukankan      html  css  js  c++  java
  • 响应内容 ValueError: No JSON object could be decoded 异常。

     

    requests模块的返回对象是一个Response对象,可以从这个对象中获取需要的信息。下面 r 代表Response对象。

    r.text】:文本响应内容。

    r.context】:二进制响应内容。

    r.json()】:JSON响应内容 。

    r.raw】:原始相应内容。

    1)文本响应内容。

    例子:

    import requests

    r = requests.get('https://api.github.com/events')

    print(r.text)

    运行结果:

     

    对于非文本请求,你也能以字节的方式访问请求响应体。

    2)二进制响应内容。

    对于非文本请求,你也能以字节的方式访问请求响应体。

    例子1:

    import requests

    r = requests.get('https://api.github.com/events')

    print(r.content)

    运行结果:

    Requests 会自动为你解码 gzip deflate 传输编码的响应数据。

    例子2,以请求返回的二进制数据创建一张图片。

    from PIL import Image

    from io import BytesIO

    i = Image.open(BytesIO(r.content))

    3)JSON 响应内容。

    Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据。

    例子:

    import requests

    r = requests.get('https://github.com/timeline.json')

    print(r.json())

    运行结果:

    如果 JSON 解码失败, r.json 就会抛出一个异常。例如,相应内容是 401 (Unauthorized),尝试访问 r.json 将会抛出 ValueError: No JSON object could be decoded 异常。

    4)Raw响应内容。

    在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做。

    例子:

    import requests

    r = requests.get('https://github.com/timeline.json', stream=True)

    print(r.raw)

    运行结果:

    但一般情况下,你应该以下面的模式将文本流保存到文件。

    with open(filename, 'wb') as fd:

        for chunk in r.iter_content(chunk_size):

            fd.write(chunk)

    使用 Response.iter_content 将会处理大量你直接使用 Response.raw 不得不处理的。 当流下载时,上面是优先推荐的获取内容方式。

  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/lexus168/p/12669236.html
Copyright © 2011-2022 走看看