axl-node-soap
Version:
A fork of node-soap with changes to work with CUCM AXL
67 lines (56 loc) • 1.82 kB
JavaScript
/*
* Copyright (c) 2011 Vinay Pulim <vinay@milewise.com>
* MIT Licensed
*/
;
var url = require('url');
var req = require('request');
var VERSION = require('../package.json').version;
exports.request = function(rurl, data, callback, exheaders, exoptions) {
var curl = url.parse(rurl);
var secure = curl.protocol === 'https:';
var host = curl.hostname;
var port = parseInt(curl.port, 10);
var path = [curl.pathname || '/', curl.search || '', curl.hash || ''].join('');
var method = data ? "POST" : "GET";
var headers = {
"User-Agent": "node-soap/" + VERSION,
"Accept" : "text/html,application/xhtml+xml,application/xml,text/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding": "none",
"Accept-Charset": "utf-8",
"Connection": "close",
"Host": host + (isNaN(port) ? "" : ":" + port)
};
var attr;
if (typeof data === 'string') {
headers["Content-Length"] = Buffer.byteLength(data, 'utf8');
headers["Content-Type"] = "application/x-www-form-urlencoded";
}
exheaders = exheaders || {};
for (attr in exheaders) { headers[attr] = exheaders[attr]; }
var options = {
uri: curl,
method: method,
headers: headers
};
exoptions = exoptions || {};
for (attr in exoptions) { options[attr] = exoptions[attr]; }
var request = req(options, function (error, res, body) {
if (error) {
callback(error);
} else {
if (typeof body === "string") {
// Remove any extra characters that appear before or after the SOAP
// envelope.
var match = body.match(/(?:<\?[^?]*\?>[\s]*)?<([^:]*):Envelope([\S\s]*)<\/\1:Envelope>/i);
if (match) {
body = match[0];
}
}
request.on('error', callback);
callback(null, res, body);
}
});
request.end(data);
return request;
};