我正在尝试创建一些将 500 错误发送到远程服务器的中间件。错误信息在响应正文中。
如何从Response
任何类型的字符串中获取响应正文?我明白responseToStream
了,但我不知道如何使用它。
import Network.Wai
import Data.ByteString.Lazy (ByteString)
responseBody :: Response -> IO ByteString
responseBody res = _
我正在尝试创建一些将 500 错误发送到远程服务器的中间件。错误信息在响应正文中。
如何从Response
任何类型的字符串中获取响应正文?我明白responseToStream
了,但我不知道如何使用它。
import Network.Wai
import Data.ByteString.Lazy (ByteString)
responseBody :: Response -> IO ByteString
responseBody res = _
@user2407038 评论的实现:
import Data.IORef (newIORef,modifyIORef',readIORef)
import Data.Monoid ((<>))
import Data.ByteString.Lazy (ByteString)
import Data.ByteString.Builder (toLazyByteString)
import Network.Wai
responseBody :: Response -> IO ByteString
responseBody res =
let (status,headers,body) = responseToStream res in
body $ \f -> do
content <- newIORef mempty
f (\chunk -> modifyIORef' content (<> chunk)) (return ())
toLazyByteString <$> readIORef content