Current section
Files
Jump to
Current section
Files
lib/http.ex
defmodule Exfacebook.Http do
require Poison
require Logger
alias HTTPoison.Response
alias Exfacebook.Error
@moduledoc """
Http requests using `hackney` and decode response using `HTTPoison` to `JSON`.
"""
@http_options Application.get_env(:exfacebook,
:http_options,
[recv_timeout: :infinity,
timeout: 10000,
hackney: [timeout: 10000, pool: false]]
)
@doc """
Make get request and return JSON response as dictionary.
"""
@spec get(String) :: {:ok, Map.t} | {:error, Error.t}
def get(url) do
Logger.info inspect(url)
case HTTPoison.get(url, [], @http_options) do
{:ok, %Response{status_code: 200, body: body}} ->
case Poison.decode(body) do
{:ok, _value} = state -> state
error -> {:error, %Error{message: inspect(error)}}
end
{:ok, %Response{status_code: status_code}} ->
{:error, %Error{status_code: status_code, message: "not found resource"}}
{:error, %HTTPoison.Error{reason: reason}} ->
{:error, %Error{message: inspect(reason)}}
_ ->
{:error, %Error{message: "0xDEADBEEF happened"}}
end
end
end