X-Git-Url: http://gitweb.michael.orlitzky.com/?p=dead%2Flwn-epub.git;a=blobdiff_plain;f=src%2FLWN%2FHTTP.hs;h=ea7174ad1e5b70d8ec9a6a9bc8b9ad3f0411fbba;hp=743a99c8fa0fb98429a114e13e621e074b5b825d;hb=5b4118c3497d02fc7b533f6b3f5db3b13969f99a;hpb=abd072d7a4b825cdfc7aaa49ef3c7897ffad3bf2 diff --git a/src/LWN/HTTP.hs b/src/LWN/HTTP.hs index 743a99c..ea7174a 100644 --- a/src/LWN/HTTP.hs +++ b/src/LWN/HTTP.hs @@ -14,12 +14,12 @@ import Network.Curl ( initialize, respBody, respCurlCode, - withCurlDo + withCurlDo ) import Network.Curl.Download (openURI) import System.Directory (doesFileExist, getTemporaryDirectory) -import System.IO (hPutStrLn, stderr) -import System.IO.Temp (openBinaryTempFile) +import System.IO (hClose, hPutStrLn, stderr, stdout) +import System.IO.Temp (openBinaryTempFile, openTempFile) import LWN.URI (filename) @@ -44,23 +44,38 @@ default_curl_opts = -- 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 ] +make_cookie_jar :: IO FilePath +make_cookie_jar = do + temp_dir <- getTemporaryDirectory + let file_name_template = "lwn-epub-cookies.txt" + (out_path, out_handle) <- openTempFile temp_dir file_name_template + hClose out_handle -- We just want to create it for now. + 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. @@ -76,9 +91,9 @@ get_page cookie_jar url = 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 @@ -86,6 +101,8 @@ get_page cookie_jar url = 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