pipes-http-1.0.0: HTTP client with pipes interface

Safe HaskellNone

Pipes.HTTP

Contents

Description

Here is an example GET request that streams the response body to standard output:

 import Pipes
 import Pipes.HTTP
 import qualified Pipes.ByteString as PB  -- from `pipes-bytestring`

 main = do
     req <- parseUrl "https://www.example.com"
     withManager tlsManagerSettings $ \m ->
         withHTTP req m $ \resp ->
             runEffect $ responseBody resp >-> PB.stdout

Here is an example POST request that also streams the request body from standard input:

 {-# LANGUAGE OverloadedStrings #-}

 import Pipes
 import Pipes.HTTP
 import qualified Pipes.ByteString as PB

 main = do
     req <- parseUrl "https://www.example.com"
     let req' = req
             { method = "POST"
             , requestBody = stream PB.stdin
             }
     withManager tlsManagerSettings $ \m ->
         withHTTP req' m $ \resp ->
             runEffect $ responseBody resp >-> PB.stdout

For non-streaming request bodies, study the RequestBody type, which also accepts strict / lazy bytestrings or builders.

Synopsis

http-client

This module is a thin pipes wrapper around the http-client and http-client-tls libraries.

Read the documentation in the Network.HTTP.Client module of the http-client library to learn about how to:

  • manage connections using connection pooling,
  • use more advanced request/response features,
  • handle exceptions, and:
  • manage cookies.

http-client-tls provides support for TLS connections (i.e. HTTPS).

Pipes Interface

withHTTPSource

Arguments

:: Request 
-> Manager 
-> (Response (Producer ByteString IO ()) -> IO a)

Handler for response

-> IO a 

Send an HTTP Request and wait for an HTTP Response

streamN :: Int64 -> Producer ByteString IO () -> RequestBodySource

Create a RequestBody from a content length and Producer

stream :: Producer ByteString IO () -> RequestBodySource

Create a RequestBody from a Producer

stream is more flexible than streamN, but requires the server to support chunked transfer encoding.