http2-5.2.0: Network/HTTP2/Client.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
-- | HTTP\/2 client library.
--
-- Example:
--
-- > {-# LANGUAGE OverloadedStrings #-}
-- > {-# LANGUAGE RankNTypes #-}
-- >
-- > module Main where
-- >
-- > import qualified Data.ByteString.Char8 as C8
-- > import Network.HTTP.Types
-- > import Network.Run.TCP (runTCPClient) -- network-run
-- > import UnliftIO.Async -- unliftio
-- > import qualified UnliftIO.Exception as E -- unliftio
-- >
-- > import Network.HTTP2.Client
-- >
-- > serverName :: String
-- > serverName = "127.0.0.1"
-- >
-- > main :: IO ()
-- > main = runTCPClient serverName "80" $ runHTTP2Client serverName
-- > where
-- > cliconf host = defaultClientConfig { authority = C8.pack host }
-- > runHTTP2Client host s = E.bracket (allocSimpleConfig s 4096)
-- > freeSimpleConfig
-- > (\conf -> run (cliconf host) conf client)
-- > client :: Client ()
-- > client sendRequest _aux = do
-- > let req0 = requestNoBody methodGet "/" []
-- > client0 = sendRequest req0 $ \rsp -> do
-- > print rsp
-- > getResponseBodyChunk rsp >>= C8.putStrLn
-- > req1 = requestNoBody methodGet "/foo" []
-- > client1 = sendRequest req1 $ \rsp -> do
-- > print rsp
-- > getResponseBodyChunk rsp >>= C8.putStrLn
-- > ex <- E.try $ concurrently_ client0 client1
-- > case ex of
-- > Left e -> print (e :: HTTP2Error)
-- > Right () -> putStrLn "OK"
module Network.HTTP2.Client (
-- * Runner
run,
-- * Client configuration
ClientConfig,
defaultClientConfig,
scheme,
authority,
cacheLimit,
connectionWindowSize,
settings,
-- * HTTP\/2 setting
Settings,
defaultSettings,
headerTableSize,
enablePush,
maxConcurrentStreams,
initialWindowSize,
maxFrameSize,
maxHeaderListSize,
pingRateLimit,
-- * Common configuration
Config (..),
allocSimpleConfig,
freeSimpleConfig,
module Network.HTTP.Semantics.Client,
-- * Error
HTTP2Error (..),
ReasonPhrase,
ErrorCode (
ErrorCode,
NoError,
ProtocolError,
InternalError,
FlowControlError,
SettingsTimeout,
StreamClosed,
FrameSizeError,
RefusedStream,
Cancel,
CompressionError,
ConnectError,
EnhanceYourCalm,
InadequateSecurity,
HTTP11Required
),
) where
import Network.HTTP.Semantics.Client
import Network.HTTP2.Client.Run
import Network.HTTP2.Frame
import Network.HTTP2.H2 hiding (authority, scheme)