Haskell:
Skicka en http-förfrågan
How to:
I Haskell används ofta biblioteket http-conduit
för att skicka HTTP-begäran. Här är hur du gör en enkel GET-begäran:
import Network.HTTP.Simple
main :: IO ()
main = do
response <- httpLBS "http://httpbin.org/get"
putStrLn $ "Statuskod: " ++ show (getResponseStatusCode response)
putStrLn $ "Svarskropp: " ++ show (getResponseResponseBody response)
Kör programmet och förvänta dig något liknande:
Statuskod: 200
Svarskropp: "{\"args\":{},\"headers\":{...},\"origin\":\"...\",\"url\":\"http://httpbin.org/get\"}"
Deep Dive
HTTP-begäran har varit grundläggande för webbprogrammering sedan tidiga 90-talet. Alternativ till http-conduit
inkluderar http-client
och lågnivåbibliotek som network
. http-conduit
använder http-client
under huven men förenklar hantering av begäran och svar.
För att skicka en POST-begäran och hantera headers använd följande kod:
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Simple
main :: IO ()
main = do
let request
= setRequestMethod "POST"
$ setRequestPath "/post"
$ setRequestHost "httpbin.org"
$ setRequestHeader "Content-Type" ["application/json"]
$ setRequestBodyLBS "{\"sample\":\"data\"}"
$ defaultRequest
response <- httpLBS request
putStrLn $ "Statuskod: " ++ show (getResponseStatusCode response)
putStrLn $ "Svarskropp: " ++ show (getResponseResponseBody response)
Detta öppnar för mer kontroll med fler alternativ för konfiguration av begäran.
See Also
http-conduit
dokumentation: https://www.stackage.org/package/http-conduit- Officiell
http-client
tutorial: https://haskell-lang.org/library/http-client - Haskell network-programmering: http://book.realworldhaskell.org/read/network-programming.html