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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM