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
- Documentação oficial de Elm para o pacote
Http
: https://package.elm-lang.org/packages/elm/http/latest/ - Um guia prático de Elm: https://guide.elm-lang.org/