Baixando uma página da web

Elm:
Baixando uma página da web

Como fazer:

Elm torna a tarefa de baixar uma página web uma jornada tranquila, principalmente com o pacote Http. Vamos ver como fazer isso na prática.

import Browser
import Http
import Html exposing (Html, text)

type alias Model =
    { content : String }

type Msg
    = Fetch
    | FetchComplete (Result Http.Error String)

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    case msg of
        Fetch ->
            ( model, Http.get { url = "https://exemplo.com", expect = Http.expectString FetchComplete } )

        FetchComplete (Ok data) ->
            ( { model | content = data }, Cmd.none )

        FetchComplete (Err _) ->
            ( { model | content = "Não foi possível baixar o conteúdo." }, Cmd.none )

main : Program () Model Msg
main =
    Browser.element
        { init = \_ -> ( { content = "" }, Cmd.none )
        , update = update
        , view = \model -> text model.content
        , subscriptions = \_ -> Sub.none
        }

A saída será o conteúdo HTML da página “https://exemplo.com” se o download for bem-sucedido ou uma mensagem de erro se algo der errado.

Aprofundamento

Historicamente, baixar páginas web era uma tarefa mais complicada em Elm devido à sua natureza fortemente tipada e ao foco em evitar efeitos colaterais. Entretanto, com o aparecimento dos pacotes como Http, isso se tornou muito mais direto. Existem alternativas, como usar WebSockets para um fluxo de dados contínuo ou usar APIs GraphQL, mas para uma simples requisição HTTP, Http.get é a sua escolha.

Quanto aos detalhes de implementação, Elm trata downloads de página web de maneira segura, evitando os problemas comuns de segurança como Cross-Site Scripting (XSS) por forçar o uso de tipos para representar HTML e Eventos. Isso assegura que você trabalhe com dados seguros bem definidos em vez de strings cruas suscetíveis a ataques.

Veja também