Fork me on GitHub wwwdude

wwwdude

wwwdude is a small and flexible http client library on top of node\'s http client

httpcodes

lib//httpcodes.js

lookup table for all HTTP status codes

  • api: public

exports.codes = {

1XX Informational

'100': 'continue',
  '101': 'switching-protocols',

2XX Successful

'200': 'ok',
  '201': 'created',
  '202': 'accepted',
  '203': 'non-authorative-information',
  '204': 'no-content',
  '205': 'reset-content',
  '207': 'partial-content',

3XX Redirection

'300': 'multiple-choices',
  '301': 'moved-permanently',
  '302': 'found',
  '303': 'see-other',
  '304': 'not-modified',
  '305': 'use-proxy',
  '307': 'temporary-redirect',

4XX Client Error

'400': 'bad-request',
  '401': 'unauthorized',
  '402': 'payment-required',
  '403': 'forbidden',
  '404': 'not-found',
  '405': 'method-not-allowed',
  '406': 'not-acceptable',
  '407': 'proxy-authentication-required',
  '408': 'request-timeout',
  '409': 'conflict',
  '410': 'gone',
  '411': 'length-required',
  '412': 'precondition-failed',
  '413': 'request-entity-too-large',
  '414': 'request-uri-too-long',
  '415': 'unsupported-media-type',
  '416': 'request-range-not-satisfiable',
  '417': 'expectation-failed',

5XX Server Error

'500': 'internal-server-error',
  '501': 'not-implemented',
  '502': 'bad-gateway',
  '503': 'service-unavailable',
  '504': 'gateway-timeout',
  '505': 'http-version-not-supported'
};

meta

lib//meta.js

takes two objects and merges their attributes

  • param: Object defaults

  • param: Object custom

  • return: Object new merged object

  • api: public

exports.mergeAttributes = function (defaults, custom) {
  var obj = {};

  Object.keys(defaults).forEach(function (key) {
      obj[key] = defaults[key];
    });
  
  if (!custom) {
    return obj;
  }

  Object.keys(custom).forEach(function (key) {
    obj[key] = custom[key]; 
  });

  return obj;
};

wwwdude

lib//wwwdude.js

Module dependencies

var Sys = require('sys');
var Http = require('http');
var Meta = require('./meta');
var Url = require('url');
var EventEmitter = require('events').EventEmitter;
var statusCodes = require('./httpcodes').codes;
var Child_process = require('child_process');

var defaultHeaders = {
  'User-Agent': 'node-wwwdude',
  'Accept-Encoding': 'gzip'
};

Factory method to initalize a client

  • return: Object

  • api: public

var createClient = exports.createClient = function createClient(clientOptions) {
  clientOptions = clientOptions || {};

  var encoding = clientOptions.encoding || 'utf8';
  var clientHeaders = Meta.mergeAttributes(defaultHeaders, clientOptions.headers);

  if (clientOptions.compress) {
    clientHeaders['Accept-Encoding'] = 'gzip';
  }

Inherit from EventEmitter

Sys.inherits(Request, EventEmitter);

Execute a prepared HTTP request

  • return: undefined

  • api: public

Request.prototype.send = function () {
    this.request.end();
  };

return the actual API

return {

    get: function (url, requestHeaders) {
      var headers = Meta.mergeAttributes(clientHeaders, requestHeaders);
      return new Request('GET', url, { headers: headers });
    },

    post: function (url, payload, requestHeaders) {
      var headers = Meta.mergeAttributes(clientHeaders, requestHeaders);
      return new Request('POST', url, { headers: headers, payload: payload });
    },

    put: function (url, payload, requestHeaders) {
      var headers = Meta.mergeAttributes(clientHeaders, requestHeaders);
      return new Request('PUT', url, { headers: headers, payload: payload });
    },

    del: function (url, requestHeaders) {
      var headers = Meta.mergeAttributes(clientHeaders, requestHeaders);
      return new Request('DELETE', url, { headers: headers });
    },

    head: function (url, requestHeaders) {
      var headers = Meta.mergeAttributes(clientHeaders, requestHeaders);
      return new Request('HEAD', url, { headers: headers });
    }

  };

};

add support for require('wwwdude')(option) additionally to require('wwwdude').createClient(options)

createClient.createClient = createClient;
module.exports = createClient;