-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Simple wrapper to use wreq without Strings -- -- This library wraps all functions from Network.Wreq which -- expects a String and replaces the String Type with the -- Network.Wreq.StringLess.StringLike Type-Class. -- -- Instances for Network.Wreq.StringLess.StringLike are given for: -- --
-- import OpenSSL.Session (context) -- import Network.HTTP.Client.OpenSSL -- -- let opts = defaults & manager .~ Left (opensslManagerSettings context) -- withOpenSSL $ -- getWith opts "https://httpbin.org/get" -- ---- -- In this example, we also set the response timeout to 10000 -- microseconds: -- --
-- import OpenSSL.Session (context)
-- import Network.HTTP.Client.OpenSSL
-- import Network.HTTP.Client (defaultManagerSettings, managerResponseTimeout)
--
-- let opts = defaults & manager .~ Left (opensslManagerSettings context)
-- & manager .~ Left (defaultManagerSettings { managerResponseTimeout = Just 10000 } )
--
-- withOpenSSL $
-- getWith opts "https://httpbin.org/get"
--
--
manager :: Lens' Options (Either ManagerSettings Manager)
-- | A lens onto all headers with the given name (there can legitimately be
-- zero or more).
--
-- Example:
--
-- -- let opts = defaults & header "Accept" .~ ["*/*"] -- getWith opts "http://httpbin.org/get" -- --header :: HeaderName -> Lens' Options [ByteString] -- | A lens onto all query parameters with the given name (there can -- legitimately be zero or more). -- -- In this example, we construct the query URL -- "http://httpbin.org/get?foo=bar&foo=quux". -- --
-- let opts = defaults & param "foo" .~ ["bar", "quux"] -- getWith opts "http://httpbin.org/get" -- --param :: Text -> Lens' Options [Text] -- | A lens onto the maximum number of redirects that will be followed -- before an exception is thrown. -- -- In this example, a HttpException will be thrown with a -- TooManyRedirects constructor, because the maximum number of -- redirects allowed will be exceeded. -- --
-- let opts = defaults & redirects .~ 3 -- getWith opts "http://httpbin.org/redirect/5" -- --redirects :: Lens' Options Int -- | A lens onto all headers (there can legitimately be zero or more). -- -- In this example, we print all the headers sent by default with every -- request. -- --
-- print (defaults ^. headers) -- --headers :: Lens' Options [Header] -- | A lens onto all query parameters. params :: Lens' Options [(Text, Text)] -- | A traversal onto the cookie with the given name, if one exists. -- -- N.B. This is an "illegal" Traversal': we can change the -- cookieName of the associated Cookie so that it differs -- from the name provided to this function. cookie :: ByteString -> Traversal' Options Cookie -- | A lens onto all cookies. cookies :: Lens' Options (Maybe CookieJar) -- | A lens to get the optional status check function checkStatus :: Lens' Options (Maybe StatusChecker) -- | Supported authentication types. -- -- Do not use HTTP authentication unless you are using TLS encryption. -- These authentication tokens can easily be captured and reused by an -- attacker if transmitted in the clear. data Auth :: * data AWSAuthVersion :: * -- | AWS request signing version 4 AWSv4 :: AWSAuthVersion -- | A lens onto request authentication. -- -- Example (note the use of TLS): -- --
-- let opts = defaults & auth ?~ basicAuth "user" "pass" -- getWith opts "https://httpbin.org/basic-auth/user/pass" -- --auth :: Lens' Options (Maybe Auth) -- | Basic authentication. This consists of a plain username and password. -- -- Example (note the use of TLS): -- --
-- let opts = defaults & auth ?~ basicAuth "user" "pass" -- getWith opts "https://httpbin.org/basic-auth/user/pass" -- ---- -- Note here the use of the ?~ setter to turn an Auth into -- a Maybe Auth, to make the type of the RHS compatible -- with the auth lens. -- --
-- >>> let opts = defaults & auth ?~ basicAuth "user" "pass" -- -- >>> r <- getWith opts "https://httpbin.org/basic-auth/user/pass" -- -- >>> r ^? responseBody . key "authenticated" -- Just (Bool True) --basicAuth :: ByteString -> ByteString -> Auth -- | OAuth1 authentication. This consists of a consumer token, a consumer -- secret, a token and a token secret oauth1Auth :: ByteString -> ByteString -> ByteString -> ByteString -> Auth -- | An OAuth2 bearer token. This is treated by many services as the -- equivalent of a username and password. -- -- Example (note the use of TLS): -- --
-- let opts = defaults & auth ?~ oauth2Bearer "1234abcd" -- getWith opts "https://public-api.wordpress.com/rest/v1/me/" -- --oauth2Bearer :: ByteString -> Auth -- | A not-quite-standard OAuth2 bearer token (that seems to be used only -- by GitHub). This will be treated by whatever services accept it as the -- equivalent of a username and password. -- -- Example (note the use of TLS): -- --
-- let opts = defaults & auth ?~ oauth2Token "abcd1234" -- getWith opts "https://api.github.com/user" -- --oauth2Token :: ByteString -> Auth -- | AWS v4 request signature. -- -- Example (note the use of TLS): -- --
-- let opts = defaults & auth ?~ 'awsAuth AWSv4' "key" "secret" -- getWith opts "https://dynamodb.us-west-2.amazonaws.com" -- --awsAuth :: AWSAuthVersion -> ByteString -> ByteString -> Auth -- | Define a HTTP proxy, consisting of a hostname and port number. data Proxy :: * Proxy :: ByteString -> Int -> Proxy -- | A lens onto proxy configuration. -- -- Example: -- --
-- let opts = defaults & proxy ?~ httpProxy "localhost" 8000 -- getWith opts "http://httpbin.org/get" -- ---- -- Note here the use of the ?~ setter to turn a Proxy into -- a Maybe Proxy, to make the type of the RHS compatible -- with the proxy lens. proxy :: Lens' Options (Maybe Proxy) -- | Proxy configuration. -- -- Example: -- --
-- let opts = defaults & proxy ?~ httpProxy "localhost" 8000 -- getWith opts "http://httpbin.org/get" -- ---- -- Note here the use of the ?~ setter to turn a Proxy into -- a Maybe Proxy, to make the type of the RHS compatible -- with the proxy lens. httpProxy :: ByteString -> Int -> Proxy withManager :: (Options -> IO a) -> IO a -- | A product type for representing more complex payload types. data Payload :: * Raw :: ContentType -> RequestBody -> Payload -- | A key/value pair for an application/x-www-form-urlencoded -- POST request body. data FormParam :: * [:=] :: FormParam -- | A type that can be rendered as the value portion of a key/value pair -- for use in an application/x-www-form-urlencoded POST body. -- Intended for use with the FormParam type. -- -- The instances for String, strict Text, and lazy -- Text are all encoded using UTF-8 before being URL-encoded. -- -- The instance for Maybe gives an empty string on Nothing, -- and otherwise uses the contained type's instance. class FormValue a -- | A single part of a multipart message. data Part :: * -- | A lens onto the name of the input element associated -- with part of a multipart form upload. partName :: Lens' Part Text -- | A lens onto the filename associated with part of a multipart form -- upload. partFileName :: Lens' Part (Maybe String) -- | A lens onto the content-type associated with part of a multipart form -- upload. partContentType :: Traversal' Part (Maybe MimeType) -- | A lens onto the code that fetches the data associated with part of a -- multipart form upload. partGetBody :: Lens' Part (IO RequestBody) -- | Make a Part whose content is a strict ByteString. -- -- The Part does not have a file name or content type associated -- with it. partBS :: Text -> ByteString -> Part -- | Make a Part whose content is a lazy ByteString. -- -- The Part does not have a file name or content type associated -- with it. partLBS :: Text -> ByteString -> Part -- | Make a Part whose content is a strict Text, encoded as -- UTF-8. -- -- The Part does not have a file name or content type associated -- with it. partText :: Text -> Text -> Part -- | Make a Part whose content is a String, encoded as -- UTF-8. -- -- The Part does not have a file name or content type associated -- with it. partString :: Text -> String -> Part -- | Make a Part from a file. -- -- The entire file will reside in memory at once. If you want constant -- memory usage, use partFileSource. -- -- The FilePath supplied will be used as the file name of the -- Part. If you do not want to reveal this name to the server, you -- must remove it prior to uploading. -- -- The Part does not have a content type associated with it. partFile :: Text -> FilePath -> Part -- | Stream a Part from a file. -- -- The FilePath supplied will be used as the file name of the -- Part. If you do not want to reveal this name to the server, you -- must remove it prior to uploading. -- -- The Part does not have a content type associated with it. partFileSource :: Text -> FilePath -> Part -- | A simple representation of the HTTP response. -- -- Since 0.1.0 data Response body :: * -> * -- | A lens onto the body of a response. -- --
-- r <- get "http://httpbin.org/get" -- print (r ^. responseBody) -- --responseBody :: Functor f => (body0 -> f body1) -> Response body0 -> f (Response body1) -- | A lens onto all matching named headers in an HTTP response. -- -- To access exactly one header (the result will be the empty string if -- there is no match), use the (^.) operator. -- --
-- r <- get "http://httpbin.org/get" -- print (r ^. responseHeader "Content-Type") -- ---- -- To access at most one header (the result will be Nothing if -- there is no match), use the (^?) operator. -- --
-- r <- get "http://httpbin.org/get" -- print (r ^? responseHeader "Content-Transfer-Encoding") -- ---- -- To access all (zero or more) matching headers, use the (^..) -- operator. -- --
-- r <- get "http://httpbin.org/get" -- print (r ^.. responseHeader "Set-Cookie") -- --responseHeader :: HeaderName -> Traversal' (Response body) ByteString -- | A fold over Link headers, matching on both parameter name and -- value. -- -- For example, here is a Link header returned by the GitHub -- search API. -- --
-- Link: -- <https://api.github.com/search/code?q=addClass+user%3Amozilla&page=2>; rel="next", -- <https://api.github.com/search/code?q=addClass+user%3Amozilla&page=34>; rel="last" ---- -- And here is an example of how we can retrieve the URL for the -- next link programatically. -- --
-- r <- get "https://api.github.com/search/code?q=addClass+user:mozilla" -- print (r ^? responseLink "rel" "next" . linkURL) -- --responseLink :: ByteString -> ByteString -> Fold (Response body) Link -- | A fold over any cookies that match the given name. -- --
-- r <- get "http://www.nytimes.com/" -- print (r ^? responseCookie "RMID") -- --responseCookie :: ByteString -> Fold (Response body) Cookie -- | A lens onto all headers in an HTTP response. responseHeaders :: Functor f => (ResponseHeaders -> f ResponseHeaders) -> Response body -> f (Response body) -- | A lens onto all cookies set in the response. responseCookieJar :: Functor f => (CookieJar -> f CookieJar) -> Response body -> f (Response body) -- | A lens onto the status of an HTTP response. responseStatus :: Functor f => (Status -> f Status) -> Response body -> f (Response body) -- | HTTP Status. -- -- Only the statusCode is used for comparisons. -- -- Please use mkStatus to create status codes from code and -- message, or the Enum instance or the status code constants -- (like ok200). There might be additional record members in the -- future. -- -- Note that the Show instance is only for debugging. data Status :: * -- | A lens onto the numeric identifier of an HTTP status. statusCode :: Lens' Status Int -- | A lens onto the textual description of an HTTP status. statusMessage :: Lens' Status ByteString -- | An element of a Link header. data Link :: * -- | A lens onto the URL portion of a Link element. linkURL :: Lens' Link ByteString -- | A lens onto the parameters of a Link element. linkParams :: Lens' Link [(ByteString, ByteString)] -- | The error type used by asJSON and asValue if a failure -- occurs when parsing a response body as JSON. data JSONError :: * JSONError :: String -> JSONError -- | Convert the body of an HTTP response from JSON to a suitable Haskell -- type. -- -- In this example, we use asJSON in the IO monad, where -- it will throw a JSONError exception if conversion to the -- desired type fails. -- --
-- {-# LANGUAGE DeriveGeneric #-}
-- import GHC.Generics (Generic)
--
-- {- This Haskell type corresponds to the structure of a
-- response body from httpbin.org. -}
--
-- data GetBody = GetBody {
-- headers :: Map Text Text
-- , args :: Map Text Text
-- , origin :: Text
-- , url :: Text
-- } deriving (Show, Generic)
--
-- -- Get GHC to derive a FromJSON instance for us.
-- instance FromJSON GetBody
--
-- {- The fact that we want a GetBody below will be inferred by our
-- use of the "headers" accessor function. -}
--
-- foo = do
-- r <- asJSON =<< get "http://httpbin.org/get"
-- print (headers (r ^. responseBody))
--
--
--
-- If we use asJSON in the Either monad, it will return
-- Left with a JSONError payload if conversion fails, and
-- Right with a Response whose responseBody is the
-- converted value on success.
asJSON :: (MonadThrow m, FromJSON a) => Response ByteString -> m (Response a)
-- | Convert the body of an HTTP response from JSON to a Value.
--
-- In this example, we use asValue in the IO monad, where
-- it will throw a JSONError exception if the conversion to
-- Value fails.
--
-- -- foo = do -- r <- asValue =<< get "http://httpbin.org/get" -- print (r ^? responseBody . key "headers" . key "User-Agent") -- --asValue :: MonadThrow m => Response ByteString -> m (Response Value) data Cookie :: * -- | A lens onto the name of a cookie. cookieName :: Lens' Cookie ByteString -- | A lens onto the value of a cookie. cookieValue :: Lens' Cookie ByteString -- | A lens onto the expiry time of a cookie. cookieExpiryTime :: Lens' Cookie UTCTime -- | A lens onto the domain of a cookie. cookieDomain :: Lens' Cookie ByteString -- | A lens onto the path of a cookie. cookiePath :: Lens' Cookie ByteString -- | Turn an attoparsec Parser into a Fold. -- -- Both headers and bodies can contain complicated data that we may need -- to parse. -- -- Example: when responding to an OPTIONS request, a server may return -- the list of verbs it supports in any order, up to and including -- changing the order on every request (which httpbin.org /actually -- does/!). To deal with this possibility, we parse the list, then sort -- it. -- --
-- >>> import Data.Attoparsec.ByteString.Char8 as A -- -- >>> import Data.List (sort) -- -- >>> -- -- >>> let comma = skipSpace >> "," >> skipSpace -- -- >>> let verbs = A.takeWhile isAlpha_ascii `sepBy` comma -- -- >>> -- -- >>> r <- options "http://httpbin.org/get" -- -- >>> r ^. responseHeader "Allow" . atto verbs . to sort -- ["GET","HEAD","OPTIONS"] --atto :: Parser a -> Fold ByteString a -- | The same as atto, but ensures that the parser consumes the -- entire input. -- -- Equivalent to: -- --
-- atto_ myParser = atto (myParser <* endOfInput) -- --atto_ :: Parser a -> Fold ByteString a