packages feed

mahoro-0.1.1: HTTP.hs

-- | HTTP.hs
-- A module for download pages from net.

module HTTP (
    HTTPError(..),
    downloadPage
) where

import DB
import Config

import Network.Curl
import Control.Concurrent hiding (Chan)
import Control.OldException

data HTTPError = PageDeleted
               | SomeError
               deriving Show


downloadPage :: Chan -> URL -> IO (Either HTTPError String)
downloadPage chan (URL url) = withCurlDo $ do
    response <- curlGetResponse_ url (curlOptions chan)
               :: IO (CurlResponse_ [(String, String)] String)
    return $ case respStatus response of
      200 -> Right $ respBody response
      404 -> Left PageDeleted
      _ -> Left SomeError            


curlOptions :: Chan -> [CurlOption]
curlOptions chan =
    [ CurlTimeout 5
    , CurlReferer (curl chan)
    , CurlUserAgent "Mozilla/5.0 (X11; U; Linux i686; en-US;\
                    \rv:1.9.1.2) Gecko/20090804 Shiretoko/3.5.2"
    , CurlCookie (ccookies chan)
    ]