• 响应内容 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 不得不处理的。 当流下载时,上面是优先推荐的获取内容方式。

  • 相关阅读:
    vue报错 Do not use built-in or reserved HTML elements as component id:header
    vue 报错./lib/html5-entities.js this relative module was not
    vue报错/ style-loader: Adds some css to the DOM by adding a <style> tag
    vue报错 Module not found: Error: Cannot resolve 'file' or 'directory'
    vue报错 vue-cli 引入 stylus 失败
    oracle 定时任务
    Java 基础面试题
    在Java中调用带参数的存储过程
    Linux安装JDK完整步骤
    Spring中获取数据库表主键序列
  • 原文地址:https://www.cnblogs.com/lexus168/p/12669236.html
Copyright © 2020-2023  润新知