From 35e8b904308e8a82ed3d4b10e46de918e69205a2 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Sun, 28 Feb 2016 13:32:06 +0000 Subject: [PATCH] Use HTTPS where necessary in HTTP.Client Partially fixes #1. --- bower.json | 3 ++- src/Node/HTTP/Client.js | 4 +++- src/Node/HTTP/Client.purs | 3 ++- test/Main.purs | 21 ++++++++++++++++----- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/bower.json b/bower.json index 7ddd9e9..4aea68d 100644 --- a/bower.json +++ b/bower.json @@ -20,6 +20,7 @@ "purescript-maps": "^0.5.4", "purescript-options": "^0.6.0", "purescript-unsafe-coerce": "^0.1.0", - "purescript-node-streams": "^0.3.0" + "purescript-node-streams": "^0.3.0", + "purescript-node-url": "^0.1.1" } } diff --git a/src/Node/HTTP/Client.js b/src/Node/HTTP/Client.js index 871eb09..19499ed 100644 --- a/src/Node/HTTP/Client.js +++ b/src/Node/HTTP/Client.js @@ -3,11 +3,13 @@ // module Node.HTTP.Client var http = require('http'); +var https = require('https'); exports.requestImpl = function(opts) { return function(k) { return function() { - return http.request(opts, function(res) { + var lib = opts.protocol === 'https:' ? https : http; + return lib.request(opts, function(res) { k(res)(); }); }; diff --git a/src/Node/HTTP/Client.purs b/src/Node/HTTP/Client.purs index 17c5e7a..4a8fcdf 100644 --- a/src/Node/HTTP/Client.purs +++ b/src/Node/HTTP/Client.purs @@ -31,6 +31,7 @@ import Data.StrMap (StrMap()) import Node.HTTP (HTTP()) import Node.Stream (Readable, Writable) +import Node.URL as URL import Control.Monad.Eff (Eff) @@ -84,7 +85,7 @@ request = requestImpl <<< options -- | Make a HTTP request from a URI string and response callback. requestFromURI :: forall eff. String -> (Response -> Eff (http :: HTTP | eff) Unit) -> Eff (http :: HTTP | eff) Request -requestFromURI = requestImpl <<< toForeign +requestFromURI = requestImpl <<< toForeign <<< URL.parse -- | Create a writable stream from a request object. requestAsStream :: forall eff r. Request -> Writable r (http :: HTTP | eff) diff --git a/test/Main.purs b/test/Main.purs index 5eda79c..21da7cf 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -15,14 +15,14 @@ import Node.Encoding foreign import stdout :: forall eff r. Writable r eff main = do + testBasic + testHttps + +testBasic = do server <- createServer respond listen server 8080 $ void do log "Listening on port 8080." - req <- Client.requestFromURI "http://localhost:8080/" \response -> void do - log "Response from GET /:" - let responseStream = Client.responseAsStream response - pipe responseStream stdout - end (Client.requestAsStream req) (return unit) + simpleReq "http://localhost:8080" where respond req res = do setStatusCode res 200 @@ -41,3 +41,14 @@ main = do writeString outputStream UTF8 html(return unit) end outputStream (return unit) "POST" -> void $ pipe inputStream outputStream + +testHttps = + simpleReq "https://api.github.com" + +simpleReq uri = do + log ("GET " <> uri <> ":") + req <- Client.requestFromURI uri \response -> void do + log "Response:" + let responseStream = Client.responseAsStream response + pipe responseStream stdout + end (Client.requestAsStream req) (return unit)