sahilpaudel
Unable to send headers in HTTPoison.get
My code snippet.
def make_request(path, params) do
url = construct_url(path, params)
headers = []
case HTTPoison.get(url, headers) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
case Poison.decode(body) do
{:ok, decoded} -> {:ok, decoded}
{:error, error} ->{:error, error}
end
{:ok, %HTTPoison.Response{status_code: status_code }} ->
{:error, status_code}
{:error, error} -> {:error, error}
end
end
defp construct_url(path, params) do
path <> params
end
the above code is working fine as expected however if I add
headers = [{“Accept-Encoding”,“gzip, deflate”}, {“Content-Type”, “application/json”}]
It gives error
{:error, {:invalid, <<31>>, 0}}
Anything I am doing it wrong here
Marked As Solved
Jacek
Then you can’t use simple Poison.decode(body) since Poison expects string whereas what you pass in is its compressed version. Try to decompress it first, sth like :zlib.gunzip(body), however first you should probably check if the response includes the following header: Content-Encoding: gzip
Also Liked
speeddragon
I think that issue could be about Poison.decode/1? Not sure if HTTPoison uncompresses the body. If not, you need to decompress it before you parse it, because ASCII 31 isn’t a valid string character. Not sure if this is the case.
The first 32 characters in the ASCII-table are unprintable control codes and are used to control peripherals such as printers.
https://www.ascii-code.com/







