-- | HTTP.hs -- A module which send data to board via HTTP. module HTTP ( sendPOST ) where import ParseCmd import Network.URI import Network.HTTP import Codec.Binary.UTF8.String import Control.OldException import Data.List -- | Send POST request to board and return responce. sendPOST :: String -> POSTData -> IO String sendPOST url pdata = do -- formating http request let encodePair = joinTuple (urlEncode . encodeString) joinTuple f (a, b) = (f a)++"="++(f b) body = intercalate "&" $ map encodePair pdata -- send post data result <- try (post url body) return $ case result of Left _ -> "" Right str -> str -- | Do post request and return responce body. post :: String -> String -> IO String post uriStr body = do let uri = maybe nullURI id $ parseURI uriStr result <- simpleHTTP (request uri body) return $ case result of Left _ -> "" Right resp -> rspBody resp -- | Request construcion. request :: URI -> String -> Request String request uri body = Request { rqURI = uri , rqMethod = POST , rqHeaders = [ Header HdrContentLength (show $ length body) , Header HdrContentType "application/x-www-form-urlencoded; charset=utf-8" ] , rqBody = body }