http-conduit浏览器用法

时间:2012-02-26 12:00:59

标签: haskell https web-scraping session-cookies http-conduit

我正在尝试使用HTTPS从网站上抓取数据。我成功地使用Network.HTTP.Conduit发布基本请求(发布凭据等),但是无法从响应头(Set-Cookie)中提取cookie信息。看起来http-conduit有own mechanism用于处理cookie,我无法理解。

Network.HTTP.Conduit.Browser似乎自动处理cookie(我很好),但由于缺少documentation,我无法让它工作。

有更多处理http-conduit浏览器模块的经验的人可以告诉我如何:

  1. 处理自签名证书(我设法在基本模块中使用managerCheckCerts执行此操作)
  2. 在正文中发送带有URL编码参数的POST请求,而不是遵循任何重定向(我使用了基础模块中的urlEncodedBody
  3. 在简单的GET请求中使用2.步骤中的cookie并将响应读作(懒惰)ByteString(我本来会使用httpLbs
  4. 对我来说,看起来Network.HTTP.Conduit.Browser的抽象级别比Network.HTTP.Conduit更适合我的应用程序,所以即使我可以手动处理cookie,我也想进行切换。后者。

1 个答案:

答案 0 :(得分: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

  4. http-conduit管理浏览器模块之外的cookie的方式是它没有。 Cookie在HTTP响应中返回;您可以做的是解析响应并将cookie存储在cookie罐中。这实际上是所有浏览器真的。