我写这个ManagerSettings
来记录我的 http-conduit 应用程序的所有请求和响应。(顺便说一句,我正在导入ClassyPrelude
)。
tracingManagerSettings :: ManagerSettings
tracingManagerSettings =
tlsManagerSettings { managerModifyRequest = \req -> do
putStr "TRACE: "
print req
putStrLn ""
pure req
, managerModifyResponse = \r -> do
responseChunks <- brConsume $ responseBody r
let fullResponse = mconcat responseChunks
putStr "TRACE: RESPONSE: "
putStrLn $ decodeUtf8 fullResponse
pure $ r { responseBody = pure fullResponse }
}
但是,它不起作用 - 当我使用它时,应用程序挂起并试图在打印第一个请求和第一个响应后消耗机器中的所有 RAM,这表明某种无限循环。
此外,请求被打印两次。
我之前做过类似的尝试,但没有修改r
. 那失败了,因为在我已经完全阅读了响应之后,没有更多的响应数据可以读取。
如果我将其替换为tlsManagerSettings
,则http-conduit
再次工作。
我的应用程序正在使用 libstackexchange,我已对其进行了修改以允许ManagerSettings
对其进行自定义。我正在使用 http-conduit 版本 2.2.4。
如何诊断问题?我该如何解决?