Baixando uma página da web

Elixir:
Baixando uma página da web

How to:

Para baixar uma página web em Elixir, você pode usar a biblioteca HTTPoison. Primeiro, adicione httpoison ao seu mix.exs:

defp deps do
  [
    {:httpoison, "~> 1.8"}
  ]
end

Execute mix deps.get para instalar a dependência. Agora vamos baixar uma página:

defmodule PageDownloader do
  def download(url) do
    case HTTPoison.get(url) do
      {:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
        {:ok, body}
      {:ok, %HTTPoison.Response{status_code: status_code}} ->
        {:error, "Erro: #{status_code}"}
      {:error, %HTTPoison.Error{reason: reason}} ->
        {:error, "Erro: #{inspect(reason)}"}
    end
  end
end

# Exemplo de uso:
PageDownloader.download("http://elixir-lang.org")

Saída esperada será o HTML da página, ou um erro caso não consiga baixar.

Deep Dive

Historicamente, baixar páginas da web em Elixir não era tão direto quanto hoje. Com o lançamento de bibliotecas como HTTPoison e Tesla, a tarefa se simplificou. Alternativamente, a biblioteca HTTPotion também pode ser usada, mas HTTPoison é mais popular e possui uma API mais amigável.

HTTPoison se baseia no hackney, um client HTTP em Erlang. Isso permite que você faça requisitos HTTP assíncronos e suporta recursos como SSL, cookies e redirecionamentos.

Além do HTTPoison, para tarefas mais complexas, como navegar pelo JavaScript renderizado ou manter uma sessão, você pode precisar usar ferramentas como o PhantomJS juntamente com Elixir, ou até explorar o uso de headless browsers controlados por Elixir.

See Also