Haskell:
Einen HTTP-Request senden

So geht’s:

In Haskell benutzt man oft die Bibliothek http-client für HTTP-Anfragen. Hier ein einfaches Beispiel:

import Network.HTTP.Client
import Network.HTTP.Types.Status (statusCode)

main :: IO ()
main = do
    manager <- newManager defaultManagerSettings
    request <- parseRequest "http://httpbin.org/get"
    response <- httpLbs request manager
    putStrLn $ "Statuscode: " ++ (show . statusCode . responseStatus $ response)
    putStrLn $ "Antwortkopf: " ++ (show . responseHeaders $ response)
    print $ responseBody response

Ausgabe könnte so aussehen:

Statuscode: 200
Antwortkopf: [("Content-Type", "application/json"), ...]
{ "args": {}, ... }

Deep Dive:

http-client ist praktisch der Standard in Haskell für HTTP. Früher gab es HTTP. http-client ist moderner, flexibler. Es unterstützt auch HTTPS, automatisches Handling von Cookies und umfassende Konfigurationsmöglichkeiten.

Funktionell gesehen, sendet httpLbs eine “lazy” ByteString Antwort zurück – praktisch für große Daten. Alternative Libraries wie Wreq oder Req bieten ähnliche Funktionalitäten mit etwas anderen API-Designs.

Um nur zu schießen und zu vergessen, gibt es httpNoBody – keine Antwortdaten, nur der Status-Code. Für umfangreichere Interaktionen kann man Request-Objekte anpassen: Headers setzen, Request-Methode ändern usw.

Siehe Auch: