logo
Loading...

當Header內包含「"accept-encoding": "gzip, deflate, br"」時,為什麼output的response呈現亂碼? - Cupoy

請問~為什麼當Header內包含「"accept-encoding": "gzip, deflate...

pycrawler,day006,header

當Header內包含「"accept-encoding": "gzip, deflate, br"」時,為什麼output的response呈現亂碼?

2019/12/03 上午 01:11
Python網路爬蟲討論版
vivianoo
觀看數:806
回答數:3
收藏數:1
pycrawler
day006
header

請問~為什麼當Header內包含「"accept-encoding": "gzip, deflate, br"」,output的結果會呈現亂碼(如下圖)?

把這行註解掉就正常了。

有試過指定data.encoding ='gzip',不過沒有成功 。

回答列表

  • 2019/12/03 上午 09:17
    Jeffrey
    贊同數:2
    不贊同數:0
    留言數:0

    普通瀏覽器訪問網頁,之所以添加:"Accept-Encoding" = "gzip,deflate"


    那是因為,瀏覽器對於從服務器中返回的對應的gzip壓縮的網頁,會自動解壓縮,所以,其request的時候,添加對應的頭,表明自己接受壓縮後的數據。


    而返回的壓縮後的數據,沒有解碼,而將壓縮後的數據當做普通的html文本來處理,當前顯示出來的內容,是亂碼了

  • 2019/12/03 上午 09:48
    K.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 的資訊。