)
import Network.Curl.Download (openURI)
import System.Directory (doesFileExist, getTemporaryDirectory)
-import System.IO (hClose, hPutStrLn, stderr)
+import System.IO (hClose, hPutStrLn, stderr, stdout)
import System.IO.Temp (openBinaryTempFile, openTempFile)
import LWN.URI (filename)
-- And we don't want to use a DNS cache anyway.
CurlDNSCacheTimeout 0,
+ -- Follow redirects.
+ CurlFollowLocation True,
+
-- Give it a little time...
CurlTimeout 45,
- -- And let us know when things go wrong.
+ -- For debugging.
CurlVerbose True ]
return out_path
get_page :: Maybe FilePath -> URLString -> IO (Maybe String)
-get_page cookie_jar url =
+get_page cookie_file url =
withCurlDo $ do
+ hPutStrLn stdout ("Getting page: " ++ url ++ "...")
+
-- Create a curl instance.
curl <- initialize
-- Perform the request, and get back a CurlResponse object.
-- The cast is needed to specify how we would like our headers
-- and body returned (Strings).
+ putStrLn "Curl options:"
+ print curl_opts
+
resp <- do_curl_ curl url curl_opts :: IO CurlResponse
-- Pull out the response code as a CurlCode.
return Nothing
where
get_opts =
- case cookie_jar of
+ case cookie_file of
Nothing -> []
- Just cookies -> [ CurlCookieJar cookies ]
+ Just cookies -> [ CurlCookieFile cookies ]
curl_opts = default_curl_opts ++ get_opts
log_in :: FilePath -> String -> String -> IO Bool
log_in cookie_jar username password =
withCurlDo $ do
+ hPutStrLn stdout ("Logging " ++ username ++ " in...")
+
-- Create a curl instance.
curl <- initialize