Haskell:
Sending an HTTP request

How to:

Let’s get to the fun stuff. You’ll need http-client and http-client-tls packages. Set up your stack and add them to your package.yaml or .cabal file. Then, run stack build or appropriate commands to fetch them.

Here’s a simple GET request:

import Network.HTTP.Client
import Network.HTTP.Client.TLS
import qualified Data.ByteString.Lazy.Char8 as L8

main :: IO ()
main = do
    manager <- newManager tlsManagerSettings
    request <- parseRequest "http://httpbin.org/get"
    response <- httpLbs request manager
    L8.putStrLn $ responseBody response

This will print the JSON you received from httpbin.org.

Deep Dive

Back in the day, Haskell’s HTTP requests were less straightforward, but libraries like http-client have simplified the process.

Alternatives? Sure. There’s wreq, req, and others, often with syntactic sugar or extra features. But http-client is like that dependable swiss army knife in your drawer – it always gets the job done.

Under the hood, http-client uses a Manager to handle connections. It’s efficient and reuses sockets. You can tune it, but defaults are fine to start.

See Also

To extend your toolkit, check these out: