2016-08-09 22 views
0

私は2つの要求をしたいと言います。最初のものはサーバーにログイン情報を送信し、もう1つは認証を必要とするデータを取得します。セッションhttpクライアントとのセッション

http-clientでこの動作を行うために必要なことはありますか? wreqで動作する方法は、両方の要求で同じSession値を共有することです。クッキーとすべてが自動的に処理されました。

同じを共有すると同じことがhttp-clientと一致すると仮定しましたが、これは当てはまりません。私はログインしていないことを示す応答を受け取ります。

残念ながら私は実際にはさまざまな理由でコンパイル可能なコードサンプルを提供することはできません。

+0

MB21 @。それがマネージャーの共有が必要なものでなければならないという兆候だとすれば、私の問題はどこか別のものだと思います。 –

+1

[cookies](https://hackage.haskell.org/package/http-client-0.5.1/docs/Network-HTTP-Client.html#g:14)のセクションをご覧になりましたか? –

+0

@RowanBlush私はしましたが、手動でクッキージャーを更新すべきかどうかは言いません。 –

答えて

3

機能createCookieJarupdateCookieJarinsertCookiesIntoRequestを使用して、cookie jarを自分で管理する必要があるようです。

いくつかのコード例:それはマネージャーに巻き付けちょうど読者の

import Network.HTTP.Client 
import Network.HTTP.Types.Status (statusCode) 
import Data.Time.Clock 

main :: IO() 
main = do 
    manager <- newManager defaultManagerSettings 

    now1 <- getCurrentTime 
    request1 <- parseRequest "http://cnn.com" 
    response1 <- httpLbs request1 manager 

    putStrLn $ "The status code was: " ++ (show $ statusCode $ responseStatus response1) 
    -- print $ responseBody response 

    let (jar1, _) = updateCookieJar response1 request1 now1 (createCookieJar []) 
    putStrLn $ "new jar: " ++ show jar1 

    req2 <- parseRequest "http://cnn.com" 
    now2 <- getCurrentTime 
    let (request2, jar2) = insertCookiesIntoRequest req2 jar1 now2 

    response2 <- httpLbs request2 manager 

    putStrLn $ "\nThe status code was: " ++ (show $ statusCode $ responseStatus response2) 
    -- print $ responseBody response2 
関連する問題