gpt4 book ai didi

haskell - http-conduit 浏览器使用

转载 作者:行者123 更新时间:2023-12-02 10:59:41 27 4
gpt4 key购买 nike

我正在尝试使用 HTTPS 从网站抓取数据。我成功地使用 Network.HTTP.Conduit 发出基本请求(发布凭据等),但未能从响应 header 中提取 cookie 信息(Set-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)

对我来说,与 Network.HTTP.Conduit 相比,Network.HTTP.Conduit.Browser 的抽象级别似乎更适合我的应用程序,因此即使我可以使用手动处理 cookie,我也想进行切换后者。

最佳答案

我从未使用过浏览器,但我使用过http-conduit。我阅读了源代码来回答这些问题,如果有任何错误,我深表歉意。

  1. 做你正在做的同样的事情。使用正确的 managerCheckCerts 创建 Manager 后,将其传递给 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 jar 中。这实际上就是浏览器真正所做的一切。

关于haskell - http-conduit 浏览器使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9452870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com