#haskell
#haskell
Вопрос:
Итак, я пытаюсь использовать сеть.Библиотека браузера для хранения сеансов cookie. Вот что у меня есть на данный момент:
main = do
args <- getArgs
[user, pass] <- if not (null args) then return args else do
user <- fetch "username"
pass <- fetch "password"
return [user, pass]
sup <- browse $ do
-- setOutHandler $ const $ return ()
(request (getRequest ("http://www.plurk.com/API/Users/login?"
"username=" user
"amp;password=" pass
"amp;api_key=FVXhr06sHbbp7Lv2rezPVw8rhpl7fNnX")))
let (_,a) = rspHeaders <$> sup
-- let (Right b) = parseJSON a
-- let (Just c) = findIn b ["fans_count"]
putStrLn $ hdrValue (a!!5)
fetch info = do
putStr $ "Enter your plurk " info ": "
hFlush stdout
return =<< getLine
это дает следующий результат:
Sending:
GET /API/Users/login?username=saiko_chriskunamp;password=XXXXXXXXXXamp;api_key=FVXhr06sHbbp7Lv2rezPVw8rhpl7fNnX HTTP/1.1
Host: www.plurk.com
Content-Length: 0
User-Agent: hs-HTTP-4000.0.9
Creating new connection to www.plurk.com
Received:
HTTP/1.1 200 OK
Server: nginx/1.0.0
Date: Sat, 21 May 2011 06:37:41 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Set-Cookie: plurkcookiea="bYQstPmQg58L5hTs9nZ7fvIEzuc=?age=STIwCi4=amp;api_login=STAxCi4=amp;chkN=Uyc4YzU1ZWM3YTMzNzQxM2I2MDM2MmY1ZWZhODM5NzdhOScKcDEKLg==amp;gender=TDFMCi4=amp;user_id=TDgwNTc3NDlMCi4=amp;user_ip=Uyc3NS4zNi4yMTMuMjgnCnAxCi4="; Domain=.plurk.com; expires=Sat, 04-Jun-2011 06:37:41 GMT; Max-Age=1209600; Path=/
Expires: Sat, 21 May 2011 06:37:40 GMT
Cache-Control: no-cache
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 2648
Cookies received:
MkCookie {ckDomain = ".plurk.com", ckName = "plurkcookiea", ckValue = "bYQstPmQg58L5hTs9nZ7fvIEzuc=?age=STIwCi4=amp;api_login=STAxCi4=amp;chkN=Uyc4YzU1ZWM3YTMzNzQxM2I2MDM2MmY1ZWZhODM5NzdhOScKcDEKLg==amp;gender=TDFMCi4=amp;user_id=TDgwNTc3NDlMCi4=amp;user_ip=Uyc3NS4zNi4yMTMuMjgnCnAxCi4=", ckPath = Just "/", ckComment = Nothing, ckVersion = Nothing}
Accepting cookies with names: plurkcookiea
plurkcookiea="bYQstPmQg58L5hTs9nZ7fvIEzuc=?age=STIwCi4=amp;api_login=STAxCi4=amp;chkN=Uyc4YzU1ZWM3YTMzNzQxM2I2MDM2MmY1ZWZhODM5NzdhOScKcDEKLg==amp;gender=TDFMCi4=amp;user_id=TDgwNTc3NDlMCi4=amp;user_ip=Uyc3NS4zNi4yMTMuMjgnCnAxCi4="; Domain=.plurk.com; expires=Sat, 04-Jun-2011 06:37:41 GMT; Max-Age=1209600; Path=/
Последняя строка — это результат putStrLn , и я мог бы запустить ее через parsec, если бы мне действительно было нужно .. но выше этого, из выходных данных browse, есть конструктор MkCookie со всей необходимой мне информацией. Есть ли какой-нибудь способ легко получить это?
Ответ №1:
getCookies
внутри BrowserAction
монады возвращается список принятых файлов cookie. Используйте это следующим образом:
import Network.HTTP
import Network.Browser
main = do
(rsp, cookies) <- browse $ do
rsp <- request $ getRequest "http://google.com/"
cookies <- getCookies
return (rsp, cookies)
print cookies