title: NodeJS https client errors - 400
body: <p>I am creating a NodeJS service that connects to Proxmox 2.1's REST api.</p>
  
  <p>My Script:</p>
  
  <pre><code>// module dependencies
  var http    = require('http'),
      url     = require('url'),
      https   = require('https'),
      querystring = require('querystring'),
      fs     = require('fs');
  
  exports.urlReq = function(reqUrl, options, cb){
      if(typeof options === "function"){ cb = options; options = {}; }// incase no options passed in
  
      // parse url to chunks
      reqUrl = url.parse(reqUrl);
  
      // http.request settings
      var settings = { 
          host: reqUrl.hostname,
          port: reqUrl.port || 80,
          path: reqUrl.pathname,
          headers: options.headers || {},
          method: options.method || 'GET',
          requestCert: false
      };
  
      // if there are params:
      if(options.params){
          options.params = querystring.stringify(options.params); 
          settings.headers['Content-Length'] = options.params.length; 
      }; 
  
  
      // MAKE THE REQUEST
      var req = https.request(settings); 
  
      req.on('error', function(err) {
          console.log(err);
      });
  
      // when the response comes back
      req.on('response', function(res){
          res.body = '';
  
          console.log("statusCode: ", res.statusCode);
          console.log("headers: ", res.headers);
  
          res.setEncoding('utf-8');
  
          // concat chunks
          res.on('data', function(chunk){ res.body += chunk });
  
          res.on('error', function(err){
              throw err;
          })
  
          // when the response has finished
          res.on('end', function(){
  
              // fire callback
              cb(res.body, res);
          });
      }); 
  
      // if there are params: write them to the request
      if(options.params){ req.write(options.params) };
  
      // end the request
      req.end();
  }
  </code></pre>
  
  <p>The script works for GET requests, although when doing POST requests, it dies. It does not throw any errors, it just silently fails. </p>
  
  <p>When console logging the response, here is the res.connection object:</p>
  
  <pre><code>connection: 
        { pair: [Object],
          writable: true,
          readable: true,
          _paused: false,
          _needDrain: false,
          _pending: [],
          _pendingCallbacks: [],
          _pendingBytes: 0,
          socket: [Object],
          encrypted: [Object],
          authorized: false,
          _controlReleased: true,
          _events: [Object],
          _pool: &lt;Buffer 48 54 54 50 2f 31 2e 31 20 34 30 30 20 50 61 72 61 6d 65 74 65 72 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2d 20 64 75 70 6c 69 63 ...&gt;,
          _poolStart: 332,
          _poolEnd: 65536,
          parser: [Object],
          _httpMessage: [Circular],
          ondata: [Function: socketOnData],
          onend: [Function: socketOnEnd],
          npnProtocol: undefined,
          authorizationError: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' },
  </code></pre>
  
  <p>The server uses a self signed SSL Cert. </p>
  
  <p>Any help would be extremely appreciated, </p>
  
  <p>Thanks!</p>