docs: function(type, url, data, options, callback) {
    /* Make a request to the given URL, and call:
     *  callback(http_code, headers, data);
     *
     * Arguments:
     *  - options: hash, with the possible members:
     *    - emulate_browser: Add some firefox headers if set to True
     *    - additional_headers: hash containing some headers to add / redefine.
     */
    var body;
    var purl = URL.parse(url);
    var qs = purl.query || '';
    var secure = purl.protocol == 'https:';
    var default_port = secure && 443 || 80;
    var client = http.createClient(purl.port || default_port, purl.hostname, secure);
    client.addListener('error', function(err) {
      console.log('Error in nodetk web client.');
      console.log(err.message);
      console.log(err.stack);
    });
    var headers = {
      'host': purl.hostname,
    };
    extend(headers, options.additional_headers || {});
    if(options.emulate_browser) extend(headers, {
      'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.9) Gecko/20100401 Ubuntu/9.10 (karmic) Firefox/3.5.9',
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'fr-fr,fr;q=0.8,en;q=0.5,en-us;q=0.3',
      //'Accept-Encoding': 'gzip,deflate',
    });
    if(type == 'POST' || type == 'PUT' || type == "DELETE") {
      body = data && querystring.stringify(data) || "";
      headers['content-type'] = 'application/x-www-form-urlencoded';
      headers['content-length'] = Buffer.byteLength(body);
    }
    else if (data) {
      if(qs) qs += '&';
      qs += querystring.stringify(data);
    }
    var request = client.request(type, purl.pathname +'?'+ qs, headers);
    if(body) {
      request.write(body, 'utf8');
    }
    request.end();
    var data = '';
    request.on('response', function(response) {
      response.setEncoding('utf8');
      response.on('data', function(chunk) {
        data += chunk;
      });
      response.on('end', function() {
        callback(response.statusCode, response.headers, data);
      });
    });
  }