diff --git a/servant-client/CHANGELOG.md b/servant-client/CHANGELOG.md index f91629db..c3665a88 100644 --- a/servant-client/CHANGELOG.md +++ b/servant-client/CHANGELOG.md @@ -1,6 +1,12 @@ [The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-client/CHANGELOG.md) [Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md) +0.12.0.1 +-------- + +- Send `Accept` header. + ([#858](https://github.com/haskell-servant/servant/issues/858)) + 0.12 ---- diff --git a/servant-client/servant-client.cabal b/servant-client/servant-client.cabal index 79d7667a..fd83a780 100644 --- a/servant-client/servant-client.cabal +++ b/servant-client/servant-client.cabal @@ -1,5 +1,5 @@ name: servant-client -version: 0.12 +version: 0.12.0.1 synopsis: automatical derivation of querying functions for servant webservices description: This library lets you derive automatically Haskell functions that diff --git a/servant-client/src/Servant/Client/Internal/HttpClient.hs b/servant-client/src/Servant/Client/Internal/HttpClient.hs index d116b443..9a479c42 100644 --- a/servant-client/src/Servant/Client/Internal/HttpClient.hs +++ b/servant-client/src/Servant/Client/Internal/HttpClient.hs @@ -28,6 +28,7 @@ import Data.ByteString.Builder (toLazyByteString) import qualified Data.ByteString.Lazy as BSL import Data.Foldable (toList) import Data.Functor.Alt (Alt (..)) +import Data.Maybe (maybeToList) import Data.Monoid ((<>)) import Data.Proxy (Proxy (..)) import Data.Sequence (fromList) @@ -133,16 +134,26 @@ requestToClientRequest burl r = Client.defaultRequest <> toLazyByteString (requestPath r) , Client.queryString = renderQuery True . toList $ requestQueryString r , Client.requestHeaders = - let orig = toList $ requestHeaders r - in maybe orig (: orig) contentTypeHdr + maybeToList acceptHdr ++ maybeToList contentTypeHdr ++ headers , Client.requestBody = body , Client.secure = isSecure } where + -- Content-Type and Accept are specified by requestBody and requestAccept + headers = filter (\(h, _) -> h /= "Accept" && h /= "Content-Type") $ + toList $requestHeaders r + + acceptHdr + | null hs = Nothing + | otherwise = Just ("Accept", renderHeader hs) + where + hs = toList $ requestAccept r + (body, contentTypeHdr) = case requestBody r of Nothing -> (Client.RequestBodyLBS "", Nothing) Just (RequestBodyLBS body', typ) -> (Client.RequestBodyLBS body', Just (hContentType, renderHeader typ)) + isSecure = case baseUrlScheme burl of Http -> False Https -> True