git.iko.soy/typeable/servant
on master help sign in
move statuscheck earlier on streaming response to give good error
commit90292e1f62152fcfe9489b10b40d01d39a897399 authorGershom <gershom@awakesecurity.com> dateMon 6 Nov 2017, 11:37 (9 years ago) parentb704d3c
2 files changed+10−7
servant-client-core/src/Servant/Client/Core/Internal/HasClient.hs−1 servant-client/src/Servant/Client/Internal/HttpClient.hs+10−6
servant-client-core/src/Servant/Client/Core/Internal/HasClient.hs−1
@@ -267,7 +267,6 @@ instance OVERLAPPABLE_
267267 }
268268 return . buildFromStream $ ResultStream $ \k ->
269269 runStreamingResponse sresp $ \(status,_headers,_httpversion,reader) -> do
270− when (H.statusCode status /= 200) $ error "bad status" -- TODO fixme
271270 let unrender = unrenderFrames (Proxy :: Proxy framing) (Proxy :: Proxy a)
272271 loop bs = do
273272 res <- BL.fromStrict <$> reader
servant-client/src/Servant/Client/Internal/HttpClient.hs+10−6
@@ -111,7 +111,7 @@ performRequest req = do
111111 Right response -> do
112112 let status = Client.responseStatus response
113113 status_code = statusCode status
114− ourResponse = clientResponseToReponse response
114+ ourResponse = clientResponseToResponse response
115115 unless (status_code >= 200 && status_code < 300) $
116116 throwError $ FailureResponse ourResponse
117117 return ourResponse
@@ -121,14 +121,18 @@ performStreamingRequest req = do
121121 m <- asks manager
122122 burl <- asks baseUrl
123123 let request = requestToClientRequest burl req
124−
125124 return $ StreamingResponse $
126125 \k -> Client.withResponse request m $
127− \r ->
128− k (Client.responseStatus r, fromList $ Client.responseHeaders r, Client.responseVersion r, Client.responseBody r)
126+ \r -> do
127+ let status = Client.responseStatus r
128+ status_code = statusCode status
129+ unless (status_code >= 200 && status_code < 300) $ do
130+ b <- BSL.fromChunks <$> Client.brConsume (Client.responseBody r)
131+ throw $ FailureResponse $ Response status b (fromList $ Client.responseHeaders r) (Client.responseVersion r)
132+ k (status, fromList $ Client.responseHeaders r, Client.responseVersion r, Client.responseBody r)
129133
130−clientResponseToReponse :: Client.Response BSL.ByteString -> Response
131−clientResponseToReponse r = Response
134+clientResponseToResponse :: Client.Response BSL.ByteString -> Response
135+clientResponseToResponse r = Response
132136 { responseStatusCode = Client.responseStatus r
133137 , responseBody = Client.responseBody r
134138 , responseHeaders = fromList $ Client.responseHeaders r