響應內容 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