當Header內包含「"accept-encoding": "gzip, deflate, br"」時,為什麼output的response呈現亂碼?
請問~為什麼當Header內包含「"accept-encoding": "gzip, deflate, br"」,output的結果會呈現亂碼(如下圖)?
把這行註解掉就正常了。
有試過指定data.encoding ='gzip',不過沒有成功 。
回答列表
-
2019/12/03 上午 09:17Jeffrey贊同數:2不贊同數:0留言數:0
普通瀏覽器訪問網頁,之所以添加:"Accept-Encoding" = "gzip,deflate"
那是因為,瀏覽器對於從服務器中返回的對應的gzip壓縮的網頁,會自動解壓縮,所以,其request的時候,添加對應的頭,表明自己接受壓縮後的數據。
而返回的壓縮後的數據,沒有解碼,而將壓縮後的數據當做普通的html文本來處理,當前顯示出來的內容,是亂碼了
-
2019/12/03 上午 09:48K.F贊同數:2不贊同數:0留言數:0
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Encoding
這是因為你有帶這個headers的值等於告訴對方服務器:「請給我壓縮的資料」
print(data.headers.Content-Encoding) #這會顯示他是透過甚麼壓縮(我這邊看是br)
import brotli #這要裝解br的https://pypi.org/project/Brotli/#description
print(data.content) #顯示傳遞的原碼
print(data.text) # 這是我們直接用的 你可以比較一下
html = brotli.decompress(data.content) #把資料做解碼
print(html) #印出來
-
2019/12/03 下午 05:49張維元 (WeiYuan)贊同數:1不贊同數:0留言數:0
K.F 的回答跟我想要的回答一模一樣XD
headers 主要的意義是,發送方要告訴目標的資訊。以 Request 來說,headers 就是 client 要告訴 server 的資訊。