2014-07-11 63 views
5

我需要發出HTTP請求並確定以字節爲單位的響應大小。對於簡單的HTTP請求,我總是使用request,但我想知道是否可以使用raw來實現此目的?原始響應的大小(以字節爲單位)

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

我唯一的問題是我不明白什麼原始返回或如何可以以字節計數這種數據類型?正在使用request和原始的正確方法?

回答

10

只要採取響應的內容len()

>>> response = requests.get('https://github.com/') 
>>> len(response.content) 
51671 

如果你想保持流,例如,如果內容是(太)大可以遍歷數據和總和塊它們的大小:

>>> with requests.get('https://github.com/', stream=True) as response: 
...  size = sum(len(chunk) for chunk in response.iter_content(8196)) 
>>> size 
51671 
+1

這只是解析「內容長度」還是它實際上衡量的全部內容?另外,response.content是否包含HTTP頭文件? – ewhitt

+1

這確實確定了內容的實際長度。至少Github的首頁不會發送「內容長度」標題。 – BlackJack

+0

太棒了!非常感激! – ewhitt

1

r.rawurllib3.response.HTTPResponse的一個實例。我們可以通過查找響應的標題Content-length或使用內置函數len()來計數響應的長度。

+2

是的,但並不總是提供'Content-length'。 – ewhitt

+0

@ewhitt:如果沒有「內容長度」標題,則在收到所有數據之前無法知道全長。訪問'r。內容「強制該問題,即從」原始「連接讀取,直到讀取所有數據,在內存中構建完整文檔。在這種情況下,您最好不要使用'stream = True'。 –

相關問題