Skip to content

Commit f1d7a38

Browse files
kikapaf31
authored andcommitted
Separates response headers and cookies into two API methods: (#8)
`responseHeaders` and `responseCookies` because headers have type String while cookies are Array String Fixes #4
1 parent 54fe7ed commit f1d7a38

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/Node/HTTP/Client.purs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@ module Node.HTTP.Client
1919
, setTimeout
2020
, httpVersion
2121
, responseHeaders
22+
, responseCookies
2223
, statusCode
2324
, statusMessage
2425
) where
2526

26-
import Prelude (Unit, (<<<))
27+
import Prelude (Unit, (<<<), ($))
2728

2829
import Control.Monad.Eff (Eff)
30+
import Data.Maybe (Maybe)
2931
import Data.Foreign (Foreign, toForeign)
3032
import Data.Options (Options, Option, options, opt)
31-
import Data.StrMap (StrMap())
33+
import Data.StrMap (StrMap(), delete, lookup)
3234
import Node.HTTP (HTTP())
3335
import Node.Stream (Readable, Writable)
3436
import Node.URL as URL
@@ -99,9 +101,17 @@ foreign import setTimeout :: forall eff. Request -> Int -> Eff (http :: HTTP | e
99101
httpVersion :: Response -> String
100102
httpVersion = _.httpVersion <<< unsafeCoerce
101103

104+
headers' :: forall a. Response -> StrMap a
105+
headers' = _.headers <<< unsafeCoerce
106+
102107
-- | Get the response headers as a hash
108+
-- | Cookies are not included and could be retrieved with responseCookies
103109
responseHeaders :: Response -> StrMap String
104-
responseHeaders = _.headers <<< unsafeCoerce
110+
responseHeaders res = delete "set-cookie" $ headers' res
111+
112+
-- | Get the response cookies as Just (Array String) or Nothing if no cookies
113+
responseCookies :: Response -> Maybe (Array String)
114+
responseCookies res = lookup "set-cookie" $ headers' res
105115

106116
-- | Get the response status code
107117
statusCode :: Response -> Int

test/Main.purs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Node.HTTP (HTTP, listen, createServer, setHeader, requestMethod, requestU
77
import Node.Stream (Writable, end, pipe, writeString)
88
import Node.HTTP.Client as Client
99
import Control.Monad.Eff (Eff)
10-
import Control.Monad.Eff.Console (CONSOLE, log)
10+
import Control.Monad.Eff.Console (CONSOLE, log, logShow)
1111
import Data.Foldable (foldMap)
1212
import Partial.Unsafe (unsafeCrashWith)
1313

@@ -17,6 +17,7 @@ main :: forall eff. Eff (console :: CONSOLE, http :: HTTP | eff) Unit
1717
main = do
1818
testBasic
1919
testHttps
20+
testCookies
2021

2122
testBasic :: forall eff. Eff (console :: CONSOLE, http :: HTTP | eff) Unit
2223
testBasic = do
@@ -48,10 +49,19 @@ testHttps :: forall eff. Eff (console :: CONSOLE, http :: HTTP | eff) Unit
4849
testHttps =
4950
simpleReq "https://pursuit.purescript.org/packages/purescript-node-http/badge"
5051

52+
testCookies :: forall eff. Eff (console :: CONSOLE, http :: HTTP | eff) Unit
53+
testCookies =
54+
simpleReq
55+
"https://httpbin.org/cookies/set?cookie1=firstcookie&cookie2=secondcookie"
56+
5157
simpleReq :: forall eff. String -> Eff (console :: CONSOLE, http :: HTTP | eff) Unit
5258
simpleReq uri = do
5359
log ("GET " <> uri <> ":")
5460
req <- Client.requestFromURI uri \response -> void do
61+
log "Headers:"
62+
logShow $ Client.responseHeaders response
63+
log "Cookies:"
64+
logShow $ Client.responseCookies response
5565
log "Response:"
5666
let responseStream = Client.responseAsStream response
5767
pipe responseStream stdout

0 commit comments

Comments
 (0)