Add trailing slashes to URLs.
authorMichael Orlitzky <michael@orlitzky.com>
Thu, 28 Jun 2012 21:14:42 +0000 (17:14 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Thu, 28 Jun 2012 21:14:42 +0000 (17:14 -0400)
Spit out some debug info.

src/LWN/HTTP.hs
src/Main.hs

index 3793f10ae7470966d5b1526bcdf435af05f6fb5a..d601365e686697a43fbe681d5b4e78830e5d6c6b 100644 (file)
@@ -18,7 +18,7 @@ import Network.Curl (
   )
 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)
@@ -44,10 +44,13 @@ 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 ]
 
 
@@ -60,14 +63,19 @@ make_cookie_jar = do
   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.
@@ -83,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
 
@@ -93,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
 
index 4cc4216d0e02e3c81ccaff617acb97ff26033bc5..f0e81f76478bab18ec4bf625a474c036ec29f467 100644 (file)
@@ -1,4 +1,4 @@
-{-# LANGUAGE ScopedTypeVariables, RecordWildCards, DoAndIfThenElse #-}
+{-# LANGUAGE DoAndIfThenElse #-}
 module Main
 where
 
@@ -25,7 +25,7 @@ import CommandLine (show_help)
 import Configuration (Cfg(..), get_cfg, use_account)
 import LWN.HTTP (get_page, log_in, make_cookie_jar)
 import LWN.Page (epublish, parse)
-import LWN.URI (is_lwn_url, make_absolute_url, make_https)
+import LWN.URI (add_trailing_slash, is_lwn_url, make_absolute_url, make_https)
 import Misc (contains)
 
 
@@ -60,12 +60,15 @@ get_xml_from_article cfg = do
           hPutStrLn stderr "Failed to log in."
 
         html <- get_page (Just cj) my_article
+        print $ fromJust $ html
         return $
           case html of
             Nothing -> Nothing
             Just h  -> Just $ my_read h
       else do
         html <- get_page Nothing my_article
+        putStrLn "Not logged in."
+        print $ fromJust $ html
         return $
           case html of
             Nothing -> Nothing
@@ -91,7 +94,7 @@ get_output_handle path =
 real_article_path :: String -> IO String
 real_article_path s = do
   is_file <- doesFileExist s
-  return $ if is_file then s else check_cases
+  return $ if is_file then s else add_trailing_slash check_cases
   where
     abs_current =
       case make_absolute_url "current" of
@@ -114,6 +117,9 @@ main = do
   cfg <- get_cfg
   output_handle <- get_output_handle (output cfg)
 
+  when (use_account cfg) $ do
+    putStrLn "Using account."
+
   maybe_html <- get_xml_from_article cfg
 
   case maybe_html of
@@ -132,13 +138,13 @@ main = do
 
 test_current_article_path :: Assertion
 test_current_article_path = do
-  let expected = "https://lwn.net/current"
+  let expected = "https://lwn.net/current/"
   actual <- real_article_path "current"
   assertEqual "Current article path constructed" expected actual
 
 test_numbered_article_path :: Assertion
 test_numbered_article_path = do
-  let expected = "https://lwn.net/Articles/69"
+  let expected = "https://lwn.net/Articles/69/"
   actual <- real_article_path "69" -- I'm twelve
   assertEqual "Numbered article path constructed" expected actual