@@ -57,6 +57,7 @@ module Network.Wai
5757 , vault
5858 , requestBodyLength
5959 , requestHeaderHost
60+ , lazyRequestBody
6061 -- * Response
6162 , Response
6263 , FilePart (..)
@@ -81,6 +82,7 @@ import qualified Data.ByteString.Lazy as L
8182import Data.ByteString.Lazy.Char8 ()
8283import qualified Data.Conduit as C
8384import qualified Data.Conduit.Binary as CB
85+import Data.Conduit.Lazy (lazyConsume)
8486import qualified Data.Conduit.List as CL
8587import Data.Monoid (mempty)
8688import qualified Network.HTTP.Types as H
@@ -219,3 +221,10 @@ defaultRequest = Request
219221 , requestBodyLength = KnownLength 0
220222 , requestHeaderHost = Nothing
221223 }
224+
225+-- | Get the request body as a lazy ByteString. This uses lazy I\/O under the
226+-- surface, and therefore all typical warnings regarding lazy I/O apply.
227+--
228+-- Since 2.0.0
229+lazyRequestBody :: Request -> IO L.ByteString
230+lazyRequestBody = fmap L.fromChunks . lazyConsume . requestBody