nodejs發起HTTPS請求並獲取數據


摘要:在網站中有時候需要跨域請求數據,直接用Ajax無法實現跨域,采用其他方式需要根據不同的瀏覽器做相應的處理。用Nodejs可以很好的解決這些問題,后台引用HTTPS模塊,發送和返回的數據均為JSON對象,很方便對數據處理。

在Web項目中,有時需要通過協議調取來自其他環境的數據。HTTPS是一種應用於安全數據傳輸的網絡協議。我們都知道Ajax可以異步請求數據,但單單通過ajax無法實現跨域。采用一些其他方式需要根據不同的瀏覽器做相應處理,火狐,谷歌等和IE需要各自做相應判斷,所以這種通過瀏覽器來解析數據雖然省略了數據的解壓縮等處理,但是在有安全認證等情況下做跨域處理確比較困難。比如:IE的請求Header無法更改。這時通過Node請求並解析數據就顯得比較簡單了。如下是nodejs中通過https請求數據的全過程:

var https = require('https');
var zlib = require('zlib');

var post_data="………………";//請求數據
var reqdata = JSON.stringify(post_data);
var options = {
    hostname: '10.225.***.***',
    port: '8443',
    path: '/data/table/list',
    method: 'POST',
    rejectUnauthorized: false,
    requestCert: true,
    auth: 'admin:123456************',
    headers: {
        'username': 'admin',
        'password': '123456************',
        'Cookie': 'locale=zh_CN',
        'X-BuildTime': '2015-01-01 20:04:11',
        'Autologin': '4',
        'Accept-Encoding': 'gzip, deflate',
        'X-Timeout': '3600000',
        'Content-Type': 'Application/json',
        "Content-Length":reqdata.length
    }
};
var req = https.request(options, function (res) {
});
req.write(reqdata);
req.on('response', function (response) {
    switch (response.headers['content-encoding']) {
        case 'gzip':
            var body = '';
            var gunzip = zlib.createGunzip();
            response.pipe(gunzip);
            gunzip.on('data', function (data) {
                body += data;
            });
            gunzip.on('end', function () {
                var returndatatojson= JSON.parse(body);
                req.end();
            });
            gunzip.on('error', function (e) {
                console.log('error' + e.toString());
                req.end();
            });
            break;
        case 'deflate':
            var output = fs.createWriteStream("d:temp.txt");
            response.pipe(zlib.createInflate()).pipe(output);
            req.end();
            break;
        default:req.end();
            break;
    }
});
req.on('error', function (e) {
    console.log(new Error('problem with request: ' + e.message));
    req.end();
    setTimeout(cb, 10);
});

注:options,需要有請求數據的長度,options需要加上'Accept-Encoding': 'gzip, deflate',返回的數據需要判斷是哪種壓縮方式,然后解壓縮獲取到數據。gunzip的end事件里的returndatatojson即是獲取的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM