我正在尝试使用HTTPS从网站上抓取数据。我成功地使用Network.HTTP.Conduit发布基本请求(发布凭据等),但是无法从响应头(Set-Cookie)中提取cookie信息。看起来http-conduit有own mechanism用于处理cookie,我无法理解。
Network.HTTP.Conduit.Browser似乎自动处理cookie(我很好),但由于缺少documentation,我无法让它工作。
有更多处理http-conduit浏览器模块的经验的人可以告诉我如何:
对我来说,看起来Network.HTTP.Conduit.Browser的抽象级别比Network.HTTP.Conduit更适合我的应用程序,所以即使我可以手动处理cookie,我也想进行切换。后者。
答案 0 :(得分:2)
我从未使用过浏览器,但我使用过http-conduit。我阅读了源代码来回答这些问题,如果我犯了任何错误,我道歉。
做同样的事情。当您使用正确的Manager
创建managerCheckCerts
时,请将其传递给browse :: Manager -> BrowserAction a -> ResourceT IO a
。
makeRequest :: Request IO -> BrowserAction (Response (Source IO BS.ByteString))
需要Request IO
;像之前一样使用urlEncodedBody
创建一个带有参数的POST请求,并将其传递给makeRequest
。请将redirectCount
设置为0以禁用重定向,我相信。
我相信你只需要使用getCookieJar :: BrowserAction CookieJar
; BrowserAction
来自getBrowserState :: BrowserAction BrowserState
。
http-conduit管理浏览器模块之外的cookie的方式是它没有。 Cookie在HTTP响应中返回;您可以做的是解析响应并将cookie存储在cookie罐中。这实际上是所有浏览器真的。