//发送POST请求
// requestHead 协议方式 http或https 默认http
// host 请求域名
// port 请求端口 默认80
// path 请求路由地址
// data 请求数据
// headers 请求头部 传null 头部默认只有Content-Length
// res 用于请求直接响应
// callback 请求结束后的回调 如果传了该参数 则res将失效
function postRequest(requestHead, host, port, path, data, headers, res, callback) {
    if (!requestHead) {
        requestHead = 'http';
    }
    var head = require(requestHead);
    var options = '';
    if (!port) {
        if (requestHead == 'http') {
            port = '80';
        }
        else {
            port = "443";
        }
    }
    data = JSON.stringify(data);
    var options;
    if (headers) {
        options = {
            host: host,
            port: port,
            path: path,
            method: 'POST',
            headers: headers
        };
    }
    else {
        options = {
            host: host,
            port: port,
            path: path,
            method: 'POST'
        };
    }
    var _req = head.request(options, function (_res) {
        if (_res.statusCode == 200) {
            _res.setEncoding('utf8');
            _res.on('data', function (chunk) {
                if (res) {
                    try {
                        res.jsonp(chunk);
                    } catch (e) {
                        if (callback && typeof callback == "function") {
                            callback(chunk);
                        }
                    }
                }
                else {
                    if (callback && typeof callback == "function") {
                        callback(chunk);
                    }
                }
            });
            _res.on('error', function (e) {
                if (res) {
                    try {
                        res.jsonp("");
                    } catch (e) {
                        if (callback && typeof callback == "function") {
                            callback("");
                        }
                    }
                }
                else {
                    if (callback && typeof callback == "function") {
                        callback("");
                    }
                }
            });
        }
        else {
            console.warn(_res.statusCode, _res.statusMessage);
            try {
                res.jsonp({ statusCode: _res.statusCode, statusMessage: _res.statusMessage });
            } catch (e) {
                if (callback && typeof callback == "function") {
                    callback({ statusCode: _res.statusCode, statusMessage: _res.statusMessage });
                }
            }
        }
    });
    // 将参数发出
    _req.write(data + "\n");
    _req.end();
}
exports.postRequest = postRequest;

//发送GET请求
// requestHead 协议方式 http或https 默认http
// host 请求域名
// port 请求端口 默认80
// path 请求路由地址
// data 请求数据
// headers 请求头部 传null 头部默认只有Content-Length
// res 用于请求直接响应
// callback 请求结束后的回调 如果传了该参数 则res将失效
function getRequest(requestHead, host, port, path, data, headers, res, callback) {
    if (!requestHead) {
        requestHead = 'http';
    }
    var head = require(requestHead);
    if (!port) {
        if (requestHead == 'http') {
            port = '80';
        }
        else {
            port = "443";
        }
    }
    var opt;
    if (headers) {
        opt = {
            host: host,
            port: port,
            method: 'GET',
            path: path,
            headers: headers
        };
    }
    else {
        opt = {
            host: host,
            port: port,
            method: 'GET',
            path: path
        };
    }
    var body = '';
    var requ = head.request(opt, function (resp) {
        resp.on('data', function (d) {
            body += d;
        }).on('end', function () {
            if (res) {
                try {
                    res.jsonp(body);
                } catch (e) {
                    if (callback && typeof callback == "function") {
                        callback(body);
                    }
                }
            }
            else {
                if (callback && typeof callback == "function") {
                    callback(body);
                }
            }
        });
    }).on('error', function (e) {
        if (res) {
            try {
                res.jsonp("");
            } catch (e) {
                if (callback && typeof callback == "function") {
                    callback("");
                }
            }
        }
        else {
            if (callback && typeof callback == "function") {
                callback("");
            }
        }
    });
    if (data) {
        requ.write(data + "\n");
    }
    requ.end();
}
exports.getRequest = getRequest;