{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Imm.HTTP.Simple (defaultManager, module Reexport) where
import Imm.HTTP
import Imm.Prelude
import Imm.Pretty
import Control.Monad.Trans.Reader
import Data.CaseInsensitive
import Network.Connection as Reexport
import Network.HTTP.Client as Reexport
import Network.HTTP.Client.TLS as Reexport
import URI.ByteString
instance MonadHttpClient (ReaderT Manager IO) where
httpGet uri = do
manager <- ask
lift $ httpGet' manager uri
defaultManager :: IO Manager
defaultManager = newManager $ mkManagerSettings (TLSSettingsSimple False False False) Nothing
httpGet' :: Manager -> URI -> IO LByteString
httpGet' manager uri = do
request <- makeRequest uri
responseBody <$> httpLbs request manager
parseRequest' :: (MonadThrow m) => URI -> m Request
parseRequest' = parseRequest . show . prettyURI
makeRequest :: URI -> IO Request
makeRequest uri = do
req <- parseRequest' uri
return $ req { requestHeaders = [
(mk "User-Agent", "Mozilla/4.0"),
(mk "Accept", "*/*")]}