Skip to content

Commit a67cd56

Browse files
committed
Send Accept header in servant-client
Fixes haskell-servant#858. The bug was introduced in servant-client-core refactor (servant-client-0.12). See https://github.com/haskell-servant/servant/blob/8973cf56f1feea8830212c05ca2c2682e398499e/servant-client/src/Servant/Common/Req.hs#L151-L179 for the unbroken variant in servant-client-0.11
1 parent a3ce2c3 commit a67cd56

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

servant-client/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-client/CHANGELOG.md)
22
[Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
33

4+
0.12.0.1
5+
--------
6+
7+
- Send `Accept` header.
8+
([#858](https://github.com/haskell-servant/servant/issues/858))
9+
410
0.12
511
----
612

servant-client/servant-client.cabal

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: servant-client
2-
version: 0.12
2+
version: 0.12.0.1
33
synopsis: automatical derivation of querying functions for servant webservices
44
description:
55
This library lets you derive automatically Haskell functions that

servant-client/src/Servant/Client/Internal/HttpClient.hs

+13-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import Data.ByteString.Builder (toLazyByteString)
2828
import qualified Data.ByteString.Lazy as BSL
2929
import Data.Foldable (toList)
3030
import Data.Functor.Alt (Alt (..))
31+
import Data.Maybe (maybeToList)
3132
import Data.Monoid ((<>))
3233
import Data.Proxy (Proxy (..))
3334
import Data.Sequence (fromList)
@@ -133,16 +134,26 @@ requestToClientRequest burl r = Client.defaultRequest
133134
<> toLazyByteString (requestPath r)
134135
, Client.queryString = renderQuery True . toList $ requestQueryString r
135136
, Client.requestHeaders =
136-
let orig = toList $ requestHeaders r
137-
in maybe orig (: orig) contentTypeHdr
137+
maybeToList acceptHdr ++ maybeToList contentTypeHdr ++ headers
138138
, Client.requestBody = body
139139
, Client.secure = isSecure
140140
}
141141
where
142+
-- Content-Type and Accept are specified by requestBody and requestAccept
143+
headers = filter (\(h, _) -> h /= "Accept" && h /= "Content-Type") $
144+
toList $requestHeaders r
145+
146+
acceptHdr
147+
| null hs = Nothing
148+
| otherwise = Just ("Accept", renderHeader hs)
149+
where
150+
hs = toList $ requestAccept r
151+
142152
(body, contentTypeHdr) = case requestBody r of
143153
Nothing -> (Client.RequestBodyLBS "", Nothing)
144154
Just (RequestBodyLBS body', typ)
145155
-> (Client.RequestBodyLBS body', Just (hContentType, renderHeader typ))
156+
146157
isSecure = case baseUrlScheme burl of
147158
Http -> False
148159
Https -> True

0 commit comments

Comments
 (0)