defmodule BDS.AI.HttpClient do @moduledoc false def get(url, headers) when is_binary(url) and is_map(headers) do request = {String.to_charlist(url), Enum.map(headers, fn {key, value} -> {String.to_charlist(key), String.to_charlist(value)} end)} :inets.start() :ssl.start() case :httpc.request(:get, request, [], body_format: :binary) do {:ok, {{_version, status, _reason}, response_headers, body}} -> {:ok, %{ status: status, headers: normalize_headers(response_headers), body: body }} {:error, reason} -> {:error, reason} end end def post(url, headers, body) when is_binary(url) and is_map(headers) and is_binary(body) do request = {String.to_charlist(url), Enum.map(headers, fn {key, value} -> {String.to_charlist(key), String.to_charlist(value)} end), ~c"application/json", body} :inets.start() :ssl.start() case :httpc.request(:post, request, [], body_format: :binary) do {:ok, {{_version, status, _reason}, response_headers, response_body}} -> {:ok, %{ status: status, headers: normalize_headers(response_headers), body: response_body }} {:error, reason} -> {:error, reason} end end defp normalize_headers(headers) do Enum.into(headers, %{}, fn {key, value} -> {key |> to_string() |> String.downcase(), to_string(value)} end) end end