diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,8 @@
+## 0.5.12
+
+* Added `requestFromURI` and `requestFromURI_` functions.
+* Fixed non-TLS connections going though proxy [#337](https://github.com/snoyberg/http-client/issues/337)
+
 ## 0.5.11
 
 * Replaced `base64-bytestring` dependency with `memory`.
diff --git a/Network/HTTP/Client.hs b/Network/HTTP/Client.hs
--- a/Network/HTTP/Client.hs
+++ b/Network/HTTP/Client.hs
@@ -135,6 +135,8 @@
     , parseUrlThrow
     , parseRequest
     , parseRequest_
+    , requestFromURI
+    , requestFromURI_
     , defaultRequest
 
     , applyBasicAuth
@@ -339,7 +341,7 @@
 -- >    [ "name" .= ("Michael" :: Text)
 -- >    , "age"  .= (30 :: Int)
 -- >    ]
-
+-- >
 -- >   initialRequest <- parseRequest "http://httpbin.org/post"
 -- >   let request = initialRequest { method = "POST", requestBody = RequestBodyLBS $ encode requestObject }
 -- >
diff --git a/Network/HTTP/Client/Manager.hs b/Network/HTTP/Client/Manager.hs
--- a/Network/HTTP/Client/Manager.hs
+++ b/Network/HTTP/Client/Manager.hs
@@ -218,12 +218,14 @@
         Nothing
             | secure req -> simple CKSecure
             | otherwise -> simple CKRaw
-        Just p -> CKProxy
-            (proxyHost p)
-            (proxyPort p)
-            (lookup "Proxy-Authorization" (requestHeaders req))
-            (host req)
-            (port req)
+        Just p
+            | secure req -> CKProxy
+                (proxyHost p)
+                (proxyPort p)
+                (lookup "Proxy-Authorization" (requestHeaders req))
+                (host req)
+                (port req)
+            | otherwise -> CKRaw Nothing (proxyHost p) (proxyPort p)
   where
     simple con = con (hostAddress req) (host req) (port req)
 
diff --git a/Network/HTTP/Client/Request.hs b/Network/HTTP/Client/Request.hs
--- a/Network/HTTP/Client/Request.hs
+++ b/Network/HTTP/Client/Request.hs
@@ -11,6 +11,8 @@
     , parseUrlThrow
     , parseRequest
     , parseRequest_
+    , requestFromURI
+    , requestFromURI_
     , defaultRequest
     , setUriRelative
     , getUri
@@ -96,8 +98,8 @@
 
 -- | Convert a URL into a 'Request'.
 --
--- This defaults some of the values in 'Request', such as setting 'method' to
--- GET and 'requestHeaders' to @[]@.
+-- This function defaults some of the values in 'Request', such as setting 'method' to
+-- @"GET"@ and 'requestHeaders' to @[]@.
 --
 -- Since this function uses 'MonadThrow', the return monad can be anything that is
 -- an instance of 'MonadThrow', such as 'IO' or 'Maybe'.
@@ -111,7 +113,7 @@
 --
 -- Note that the request method must be provided as all capital letters.
 --
--- 'Request' created by this function won't cause exceptions on non-2XX
+-- A 'Request' created by this function won't cause exceptions on non-2XX
 -- response status codes. 
 --
 -- To create a request which throws on non-2XX status codes, see 'parseUrlThrow'
@@ -139,6 +141,29 @@
 -- are known to be correctly formatted.
 parseRequest_ :: String -> Request
 parseRequest_ = either throw id . parseRequest
+
+-- | Convert a 'URI' into a 'Request'.
+--
+-- This can fail if the given 'URI' is not absolute, or if the 
+-- 'URI' scheme is not @"http"@ or @"https"@. In these cases the function
+-- will throw an error via 'MonadThrow'.
+--
+-- This function defaults some of the values in 'Request', such as setting 'method' to
+-- @"GET"@ and 'requestHeaders' to @[]@.
+-- 
+-- A 'Request' created by this function won't cause exceptions on non-2XX
+-- response status codes. 
+--
+-- @since 0.5.12
+requestFromURI :: MonadThrow m => URI -> m Request
+requestFromURI = setUri defaultRequest
+
+-- | Same as 'requestFromURI', but if the conversion would fail,
+-- throws an impure exception.
+--
+-- @since 0.5.12
+requestFromURI_ :: URI -> Request
+requestFromURI_ = either throw id . requestFromURI
 
 -- | Add a 'URI' to the request. If it is absolute (includes a host name), add
 -- it as per 'setUri'; if it is relative, merge it with the existing request.
diff --git a/http-client.cabal b/http-client.cabal
--- a/http-client.cabal
+++ b/http-client.cabal
@@ -1,5 +1,5 @@
 name:                http-client
-version:             0.5.11
+version:             0.5.12
 synopsis:            An HTTP client engine
 description:         Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/http-client>.
 homepage:            https://github.com/snoyberg/http-client
diff --git a/test-nonet/Network/HTTP/Client/RequestSpec.hs b/test-nonet/Network/HTTP/Client/RequestSpec.hs
--- a/test-nonet/Network/HTTP/Client/RequestSpec.hs
+++ b/test-nonet/Network/HTTP/Client/RequestSpec.hs
@@ -16,14 +16,29 @@
 spec :: Spec
 spec = do
     describe "case insensitive scheme" $ do
-        forM_ ["http://example.com", "httP://example.com", "HttP://example.com", "HttPs://example.com"] $ \url ->
+        forM_ ["http://example.com", "httP://example.com", "HttP://example.com", "HttPs://example.com"] $ \url -> do
             it url $ case parseUrlThrow url of
                 Nothing -> error "failed"
                 Just _ -> return () :: IO ()
-        forM_ ["ftp://example.com"] $ \url ->
+            it ("URI " ++ url) $ do
+                case parseURI url of
+                    Nothing -> error ("invalid test URI: " ++ url)
+                    Just uri ->
+                        case requestFromURI uri of
+                            Nothing -> error "failed"
+                            Just _ -> return () :: IO ()
+        forM_ ["ftp://example.com"] $ \url -> do
             it url $ case parseUrlThrow url of
                 Nothing -> return () :: IO ()
                 Just req -> error $ show req
+            it ("URI " ++ url) $ do
+                case parseURI url of
+                    Nothing -> error ("invalid test URI: " ++ url)
+                    Just uri ->
+                        case requestFromURI uri of
+                            Nothing -> return () :: IO ()
+                            Just req -> error (show req)
+
 
     describe "authentication in url" $ do
       it "passes validation" $ do
