2017-08-27 18 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:それはhttpoison

答えて

5

では動作しない理由、それはjsのHTTPクライアント(axios.js)で正常に動作し、必ずURLはgzip圧縮された形で体を返し、ヘッダContent-Encoding: gzipを送信することで、このことを示していないこと。 hackney、ライブラリHTTPoisonがビルドされており、自動的にこれをデコードしません。この機能will likely be added at some point

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 
Content-Encodinggzipであればそれまでは、 :zlibモジュールを使用して身体を自分でデコードすることができます
関連する問題