@@ -45,6 +45,7 @@ module Network.Wai
4545 , Middleware
4646 , FilePart (..)
4747 , RequestBodyLength (..)
48+ , lazyRequestBody
4849 -- * Response body smart constructors
4950 , responseLBS
5051 , responseStatus
@@ -55,6 +56,7 @@ import qualified Data.ByteString.Lazy as L
5556import Data.Typeable (Typeable)
5657import qualified Data.Conduit as C
5758import qualified Data.Conduit.List as CL
59+import Data.Conduit.Lazy (lazyConsume)
5860import qualified Data.Conduit.Binary as CB
5961import Blaze.ByteString.Builder (Builder, fromLazyByteString)
6062import Network.Socket (SockAddr)
@@ -197,3 +199,10 @@ type Middleware = Application -> Application
197199--
198200-- Since 1.4.0
199201data RequestBodyLength = ChunkedBody | KnownLength Word64
202+
203+-- | Get the request body as a lazy ByteString. This uses lazy I\/O under the
204+-- surface, and therefore all typical warnings regarding lazy I/O apply.
205+--
206+-- Since 1.4.1
207+lazyRequestBody :: Request -> C.ResourceT IO L.ByteString
208+lazyRequestBody = fmap L.fromChunks . lazyConsume . requestBody