httppoison - 响应正文显示乱码而不是 html
httpoison - response body showing garbled text instead of 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)上工作正常,不知道为什么它不能与 httppoison
一起工作
URL returns 和 body 的 gzip 格式,并通过发送 header Content-Encoding: gzip
来表明这一点。 hackney
,建立在 HTTPoison 之上的库不会自动对此进行解码。此功能 will likely be added at some point。在那之前,如果 Content-Encoding
是 gzip
:
,您可以使用 :zlib
模块自己解码 body
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
如果我尝试:
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)上工作正常,不知道为什么它不能与 httppoison
一起工作URL returns 和 body 的 gzip 格式,并通过发送 header Content-Encoding: gzip
来表明这一点。 hackney
,建立在 HTTPoison 之上的库不会自动对此进行解码。此功能 will likely be added at some point。在那之前,如果 Content-Encoding
是 gzip
:
:zlib
模块自己解码 body
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