defmodule Pinchflat.HTTP.HTTPClient do @moduledoc """ This module provides a simple interface for making HTTP requests. Made to be easily swappable with other HTTP clients. If you need more complexity or security, check out HTTPoison or Mint. """ alias Pinchflat.HTTP.HTTPBehaviour @behaviour HTTPBehaviour @doc """ Makes a GET request to the given URL and returns the response. NOTE: I can't really test this with Mox and I can't think of a way to test this that isn't ultimately redundant. I'm just going to leave it untested for now and focus more on testing the consumers of this module. Returns {:ok, String.t()} | {:error, String.t()} """ @impl HTTPBehaviour def get(url, headers \\ [], opts \\ []) do case :httpc.request(:get, {url, headers}, [], opts) do {:ok, {{_version, 200, _reason_phrase}, _headers, body}} -> {:ok, body} {:ok, {{_version, status_code, reason_phrase}, _headers, _body}} -> {:error, "HTTP request failed with status code #{status_code}: #{reason_phrase}"} {:error, reason} -> {:error, "HTTP request failed: #{reason}"} end end end