EZHTTP
Description
A simple HTTP module for easy scripting or interactive use.
- get :: String -> IO String
- post :: Postable a => String -> a -> IO String
- queryString :: [(String, String)] -> String
- class Postable a where
- contentType :: a -> String
- serialize :: a -> String
- data InvalidURLException
- data HttpException
Documentation
get :: String -> IO String
Make an HTTP GET request for the URL given and return the body of the response as a String.
Simple example to print the HTML of a page:
do html <- get "http://harold.hotelling.net/"
putStrLn html
Or catch the exceptions with Control.Exception.catch:
import Control.Exception as E
do html <- get "http://harold.hotelling.net/" `E.catch` errorHandler
putStrLn html
Might throw InvalidURLException or HttpException.
post :: Postable a => String -> a -> IO String
Make an HTTP GET request for the URL given sending the list of parameters as if submitting an HTML form and return the body of the response as a String.
You can post anything that is Postable. Several options are pre-defined and the correct
Content-Type is used automatically.
- Strings (sent as text/plain)
- Form parameters
- JSON (cabal install json, then import Text.JSON)
- XML (cabal install xml, then import Text.XML.Light)
For example:
-- Post url-encoded form inputs: a=1&b=2
post url [("a", "1"), ("b", "2")]
-- Post JSON: {"a": 1, "b": 2}
let json = encJSDict [("a", 1 :: Int), ("b", 2)] in
post url json
-- Post XML: <doc><a>1</a><b>2</b></doc>
case parseXMLDoc "<doc><a>1</a><b>2</b></doc>" of
Just xml -> post url xml
Nothing -> ...
You can add support for POSTing any other data type by adding an instance declaration in your code like so:
instance Postable MyType where contentType _ = "some/type" serialize value = ...
Might throw InvalidURLException or HttpException.
queryString :: [(String, String)] -> String
A helper function to take a set of parameters and urlencode them so that you can add them to the query string of a URL or the body of a urlencoded POST request.
class Postable a where
Class of types that can be sent via HTTP POST.
Methods
contentType :: a -> String
Give the Content-Type header value for this data type.
serialize :: a -> String
Convert the value to a String to send in the body of a POST request.
data InvalidURLException
This is thrown when a String passed in as a URL fails to parse.
Instances
| Eq InvalidURLException | |
| Show InvalidURLException | |
| Typeable InvalidURLException | |
| Exception InvalidURLException |
data HttpException
This is thrown when an HTTP request fails, either because of some IO error or because the status code was something other than 200 OK.
Instances
| Eq HttpException | |
| Show HttpException | |
| Typeable HttpException | |
| Exception HttpException |