2

如果我尝试:

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

4

1 回答 1

5

该 URL 以 gzip 格式返回正文,并通过发送 header 来表明这一点Content-Encoding: gziphackney, 库 HTTPoison 建立在,不会自动解码。此功能可能会在某个时候添加。在那之前,您可以使用: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
于 2017-08-27T19:23:15.740 回答