2012-02-26 61 views
8

我試圖從使用HTTPS的網站上刮取數據。我設法使用Network.HTTP.Conduit成功發佈基本請求(發佈憑證等),但未能從響應頭文件(Set-Cookie)中提取cookie信息。它看起來像http-conduit有它的own mechanism處理cookie,我不明白。http-conduit瀏覽器使用

Network.HTTP.Conduit.Browser似乎自動處理cookie(這對我來說很好),但由於缺少documentation,我無法工作。

可能有人與處理HTTP的導管瀏覽器模塊更多的經驗告訴我如何:

  1. 處理自簽名證書(我管理的基本模塊與managerCheckCerts做到這一點)
  2. 在主體中發送帶有URL編碼參數的POST請求,但不遵循任何重定向(我爲此從基本模塊中使用urlEncodedBody
  3. 使用來自簡單GET請求中的第2步中的cookie並將響應作爲(懶)ByteString(我會用這個httpLbs

對我來說,它看起來像Network.HTTP.Conduit.Browser的抽象層更適合我的應用程序相比Network.HTTP.Conduit,所以我想使交換機即使我可以處理手動使用後者的Cookie。

+0

我也有問題找到文檔,它看起來像源代碼有示例代碼:https://github.com/exbb2/http-conduit-browser/blob/master/Network/HTTP/Conduit/Browser.hs – Lionel 2014-05-09 05:46:18

回答

2

我從來沒有使用過瀏覽器,但我使用了http-conduit。我閱讀了源代碼來回答這些問題,如果我犯了錯誤,我很抱歉。

  1. 做同樣的事情,你在做什麼。當您創建Manager右邊的managerCheckCerts時,請將其傳遞給browse :: Manager -> BrowserAction a -> ResourceT IO a

  2. makeRequest :: Request IO -> BrowserAction (Response (Source IO BS.ByteString))需要Request IO;像以前一樣使用urlEncodedBody在主體中創建帶有參數的POST請求並將其傳遞到makeRequest。我相信,將redirectCount設置爲0可禁用重定向。

  3. 我相信你只需要使用getCookieJar :: BrowserAction CookieJar; BrowserAction來自getBrowserState :: BrowserAction BrowserState

http-conduit在瀏覽器模塊外部管理cookie的方式是它沒有。 Cookie在HTTP響應中返回;你可以做的是解析響應並將cookie存儲在cookie罐中。這實際上是瀏覽器的全部功能。