The reply is gzipped:
iex(3)> s = HTTPoison.get!("https://api.stackexchange.com/users")
%HTTPoison.Response{
body: <<31, 139, 8, 0, 0, 0, 0, 0, 4, 0, 171, 86, 74, 45, 42, 202, 47, 138,
207, 76, 81, 178, 50, 49, 48, 208, 129, 114, 115, 83, 139, 139, 19, 211, 83,
149, 172, 148, 138, 51, 75, 82, 21, 50, 139, 21, 138, 82, 11, ...>>,
headers: [
{"Cache-Control", "private"},
{"Content-Type", "application/json; charset=utf-8"},
{"Content-Encoding", "gzip"},
{"Access-Control-Allow-Origin", "*"},
{"Access-Control-Allow-Methods", "GET, POST"},
{"Access-Control-Allow-Credentials", "false"},
{"X-Content-Type-Options", "nosniff"},
{"Date", "Sun, 27 Oct 2019 03:14:39 GMT"},
{"Content-Length", "85"}
],
request: %HTTPoison.Request{
body: "",
headers: [],
method: :get,
options: [],
params: %{},
url: "https://api.stackexchange.com/users"
},
request_url: "https://api.stackexchange.com/users",
status_code: 400
}
For some reason, handling this has been a requested feature since 2015…
Edit: the StackExchange API docs mention that results are ALWAYS compressed (even with Accept-Encoding: identity
) so you’ll need to pass the body through :zlib.gunzip/1
or similar before decoding, as mentioned in one of the comments on the issue linked above.
Extra edit: See also this official discussion of why the Accept-Encoding
header is ignored.