2017-08-27 23 views
2

響應體:httpoison - 顯示如果我嘗試亂碼的文本而不是HTML

url = "https://www.economist.com/news/finance-and-economics/21727073-economists-struggle-work-out-how-much-free-economy-comes-cost"  
{:ok, %HTTPoison.Response{status_code: 200, body: body}} = HTTPoison.get(url) 
IO.binwrite body 

我在控制檯中看到亂碼的文本(而不是HTML)。但是如果我在網頁上查看源代碼,那麼我在那裏看到html。我究竟做錯了什麼?

PS:它正常工作與一個js HTTP客戶端(axios.js),不知道爲什麼它不與httpoison工作

回答

5

該URL返回身在gzip壓縮的形式,並通過發送頭Content-Encoding: gzip表示該。 HTTPoison構建的庫hackney不會自動對此進行解碼。此功能will likely be added at some point。在那之前,你可以使用:zlib模塊解碼身體自己如果Content-Encodinggzip

url = "https://www.economist.com/news/finance-and-economics/21727073-economists-struggle-work-out-how-much-free-economy-comes-cost" 

{:ok, %HTTPoison.Response{status_code: 200, headers: headers, body: body}} = HTTPoison.get(url) 

gzip? = Enum.any?(headers, fn {name, value} -> 
    # Headers are case-insensitive so we compare their lower case form. 
    :hackney_bstr.to_lower(name) == "content-encoding" && 
    :hackney_bstr.to_lower(value) == "gzip" 
end) 

body = if gzip?, do: :zlib.gunzip(body), else: body 

IO.write body 
相關問題