从Network.HTTP.Enumerator迁移到Network.HTTP.Conduit

时间:2012-02-06 00:45:09

标签: haskell yesod conduit http-conduit

我不知道为什么我的代码会中断。起初我认为这是因为parseURL[]提供requestHeaders。好吧,也许我只需要告诉它resquestHeaders应该是什么。好吧,我检查了我原来工作代码生成的requestHeaders。它也会返回[]。所以现在我没有想法。下面是旧的工作代码,遵循我在GHCi中尝试使用基于新管道的库的事情。

captureRawJson :: IO Response
captureRawJson = do
    nManager <- newManager
    jRequest <- parseUrl url :: (IO (Request IO))
    jResponse <- httpLbsRedirect jRequest nManager
    closeManager nManager
    return jResponse

以上工作正常,这是我在迁移时尝试做的事情,以及我收到的错误。

Prelude Network.HTTP.Conduit> nManager <- newManager def
Prelude Network.HTTP.Conduit> jRequest <- parseUrl "https://10.69.69.1/cgi-bin/qaLinkEditor.cgi?json=1" :: (IO (Request IO))
Prelude Network.HTTP.Conduit> let response = httpLbs jRequest nManager
Prelude Network.HTTP.Conduit Control.Monad.Trans.Resource> runResourceT response
*** Exception: error unexpected packet: Handshake [ServerHelloDone]

正如您所看到的,它几乎完全相同的代码。所以我希望得到有关已发生变化的反馈,以及我应该更密切关注的内容。另外,我如何检查在客户端代码和服务器之间来回发送的http标头?

1 个答案:

答案 0 :(得分:2)

我相信这是通过tls包中的一些更改来解决的。我刚刚发布了http-conduit 1.2.5,请看看是否能解决问题。

如果仍然收到错误消息,则可能是SSL证书与您要连接的主机名不匹配。