A simple to use (hopefully) http client for the node.js platform. It adds easy control of HTTPS, gzip compression and cookie handling to the basic http functionality provided by node.js http library. Dependencies: - if you want to use gzip you will need the node-compress module built and available in the lib directory (or the same directory as httpclient.js). node-compress is here: http://github.com/waveto/node-compress Todo: - better Error handling - full set of http client tests to compare with other http clients (e.g. libcurl, libwww, winhttp) - handle all cookies correctly according to RFC - allow saving and restoring of cookies - handle gzip encoding from client to server (should be simple) - allow specification of timeouts for connection and response - allow explicit closing of connection - allow option to automatically follow redirects (should be a simple change) - property content handling (binary, text encodings etc) based on http headers - handle http expiration headers and cacheing policies - handle head, put and delete requests etc, etc, etc... Note: - currently, the httpclient object will only allow one request at a time for a given protocol and host name (e.g. http://www.google.com). this behaviour is handled in http.js where requests get queued up and executed in sequence. if you want to send parallel requests to the same site, then create a new httpclient object for each of the parallel requests. Am not sure whether this is the correct behaviour but it seems to work well for what i need right now. Usage: (see example.js) var sys = require("sys"); var httpcli = require("./httpclient"); var url = "http://www.betfair.com"; var surl = "https://www.betfair.com"; function verifyTLS(request) { sys.puts(sys.inspect(request)); return true; } var client = new httpcli.httpclient(); // a simple http request with default options (gzip off, keepalive off, https off) client.perform(url, "GET", function(result) { sys.puts(sys.inspect(result)); }, null); var client2 = new httpcli.httpclient(); // nested calls with gzip compression and keep-alive client2.perform(url, "GET", function(result) { sys.puts(sys.inspect(result)); client2.perform(url, "GET", function(result) { sys.puts(sys.inspect(result)); // https request with callback handling of certificate validation client2.perform(surl, "GET", function(result) { sys.puts(sys.inspect(result)); }, null, {"Accept-Encoding" : "none,gzip", "Connection" : "close"}, verifyTLS); }, null, {"Accept-Encoding" : "none,gzip", "Connection" : "Keep-Alive"}); }, null, {"Accept-Encoding" : "none,gzip", "Connection" : "Keep-Alive"});
billywhizz/node-httpclient
a http client for node.js that handles https, cookies and gzip compression
JavaScriptMIT