http-client 0.5.11 → 0.5.12
raw patch · 6 files changed
+62/−13 lines, 6 files
Files
- ChangeLog.md +5/−0
- Network/HTTP/Client.hs +3/−1
- Network/HTTP/Client/Manager.hs +8/−6
- Network/HTTP/Client/Request.hs +28/−3
- http-client.cabal +1/−1
- test-nonet/Network/HTTP/Client/RequestSpec.hs +17/−2
ChangeLog.md view
@@ -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`.
Network/HTTP/Client.hs view
@@ -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 } -- >
Network/HTTP/Client/Manager.hs view
@@ -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)
Network/HTTP/Client/Request.hs view
@@ -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.
http-client.cabal view
@@ -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
test-nonet/Network/HTTP/Client/RequestSpec.hs view
@@ -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