diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 2.2.3
+
+* Add `withResponse` to `Network.HTTP.Simple`
+
 ## 2.2.2.1
 
 * setRequestBodyJSON works with aeson's toEncoding function (>= 0.11)
diff --git a/Network/HTTP/Simple.hs b/Network/HTTP/Simple.hs
--- a/Network/HTTP/Simple.hs
+++ b/Network/HTTP/Simple.hs
@@ -23,6 +23,7 @@
     , httpJSONEither
     , httpSink
     , httpSource
+    , withResponse
       -- * Types
     , H.Request
     , H.Response
@@ -197,6 +198,25 @@
 httpSource req withRes = do
     man <- liftIO H.getGlobalManager
     C.bracketP (H.responseOpen req man) H.responseClose
+        (withRes . fmap bodyReaderSource)
+
+-- | Perform an action with the given request. This employes the
+-- bracket pattern.
+--
+-- This is similar to 'httpSource', but does not require
+-- 'MonadResource' and allows the result to not contain a 'C.ConduitM'
+-- value.
+--
+-- @since 2.2.3
+withResponse :: (MonadIO m, Catch.MonadMask m, MonadIO n)
+             => H.Request
+             -> (H.Response (C.ConduitM i S.ByteString n ()) -> m a)
+             -> m a
+withResponse req withRes = do
+    man <- liftIO H.getGlobalManager
+    Catch.bracket
+        (liftIO (H.responseOpen req man))
+        (liftIO . H.responseClose)
         (withRes . fmap bodyReaderSource)
 
 -- | Alternate spelling of 'httpLBS'
diff --git a/http-conduit.cabal b/http-conduit.cabal
--- a/http-conduit.cabal
+++ b/http-conduit.cabal
@@ -1,5 +1,5 @@
 name:            http-conduit
-version:         2.2.2.1
+version:         2.2.3
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
