てくのろじーたのしー

Haskellぺろぺろ

WordPressで作られたサイトにログインする

やりたいことはタイトルそのまま。haskellで書く。

使うパッケージはhttp-contuid 2.1.8とutf8-string 1.0.1.1(stackのlts-3.14)

{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString.Lazy.UTF8 as U
import Network.HTTP.Conduit

ap = [("account", "name"), ("pwd", "password")]

main = do 
  man <- newManager tlsManagerSettings
  log' <- parseUrl "http://piyopiyo/wp-login.php"
  let log= urlEncodedBody ap log'
  cookies <- httpLbs log man >>= return . responseCookieJar

  req' <- parseUrl "http://piyopiyo/target.html"
  let req = req' { cookieJar = Just cookies }
  httpLbs req man >>= return . U.toString . responseBody >>= putStrLn

mainの前半でセッション情報を含んだCookieを取得して、後半でそれを使ってログインしていないと見れないページを取得。

requestBodyにログイン情報を乗せて失敗してハマった。urlEncodedBodyを使うのがポイント。