apiary-http-client-0.1.2.0: A http client for Apiary.

Safe HaskellNone
LanguageHaskell2010

Web.Apiary.HTTP.Client

Contents

Description

A http client for Apiary's ActionT monad stack.

Synopsis

Documentation

getManager :: (Has HTTPClient es, MonadExts es m, MonadIO m) => m Manager Source

Get Manager from Apiary's MonadExts context.

withHTTPClient :: (Has HTTPClient es, MonadExts es m, MonadIO m) => (Request -> Manager -> IO a) -> Request -> m a Source

lift operations with initial manager.

Helpers to make new Request

fromWaiRequest Source

Arguments

:: ([Text] -> [Text])

Function to modify request path

-> ([Header] -> [Header])

Function to modify request headers

-> Request 
-> Request

From Network.Wai.Request To Network.HTTP.Client.Request

Copy path, headers, method, body and queryString from Network.Wai.Request

fromRequest Source

Arguments

:: (Has HTTPClient exts, MonadIO m) 
=> ([Text] -> [Text])

Function to modify request path

-> ([Header] -> [Header])

Function to modify request headers

-> ActionT exts prms m Request 

Copy path, headers, method, body and queryString from current ActionTs context.

resetHeaders :: [Header] -> [Header] Source

Remove following headers: Transfer-Encoding, Content-Length, Content-Encoding and Accept-Encoding. It's very likely you want to do this.

setPort :: Int -> Request -> Request Source

setPort port req = req{port = port}

setHostName :: ByteString -> Request -> Request Source

setHostName host req = req{host = host}

setHostHeader :: ByteString -> Request -> Request Source

Set HOST header.

setHost :: ByteString -> Request -> Request Source

Set both HOST header and request's host.

Send request and get respond

sendRequset :: (Has HTTPClient exts, MonadIO m) => Request -> ActionT exts prms m (Response ByteString) Source

Send requset and get Response ByteString For large response consider using openRequset and responseClose instead.

openRequset :: (Has HTTPClient exts, MonadIO m) => Request -> ActionT exts prms m (Response BodyReader) Source

Send request and get Response BodyReader

Send request for side effect

sendRequsetNoBody :: (Has HTTPClient exts, MonadIO m) => Request -> ActionT exts prms m (Response ()) Source

Send request without receive any body.

Send request and proxy respond

proxyTo :: (Has HTTPClient exts, MonadIO m) => Request -> ActionT exts prms m () Source

Streamming response directly from proxy target. Reset headers automatically using resetHeaders.

proxyWith Source

Arguments

:: (Has HTTPClient exts, MonadIO m) 
=> Request 
-> (Response ByteString -> Response ByteString)

Function to modify response.

-> ActionT exts prms m () 

Modify response from proxy target then send. This method caches response body in memory so be careful. You should consider remove following headers: Transfer-Encoding, Content-Length, Content-Encoding and Accept-Encoding.

forwardBadStatus :: (Has HTTPClient exts, MonadIO m) => HttpException -> ActionT exts prms m () Source

A catch handler which only deal with StatusCodeException the status code will be proxy to user. any other exceptions will be re-thrown. It's intend to use with MonadCatch or MonadBaseControl instance of ActionT

forwardBadStatus' :: (Has HTTPClient exts, MonadIO m) => HttpException -> ActionT exts prms m () Source

same with forwardBadStatus, except that any other exceptions will be result in a 404 status with exceptions message. It's intend to use with MonadCatch or MonadBaseControl instance of ActionT