Node.js 解析gzip網頁(https)

gzip網頁指網頁頭字段Content-Encoding是gzip(GNU zip)內容編碼方式。內容編碼是指不丟失實體信息的前提下所進行的壓縮。html

Node.js 代碼以下:服務器

//====================================================
// 訪問www.meitulu.com獲得pagecode
// 2017年11月6日
//====================================================


// 內置https模塊,提供了https服務器和客戶端功能
var https=require("https");

var zlib = require('zlib'); 

// cheerio模塊,提供了相似jQuery的功能
var cheerio = require("cheerio");

// 內置文件處理模塊
var fs=require('fs');

// 請求參數JSON
var options;

// request請求
var req;

//--------------------------------------
// 程序入口 Accept-Encoding:gzip, deflate, br
//--------------------------------------
function start(){
    // 初始化options  
    options={
        hostname:'www.meitulu.com',
            port:443,
            path:'/item/40.html',// 子路徑
          method:'GET',
           agent:false,
            gzip: true,
    };

    
    req=https.request(options,function(resp){
        var html = [];

        resp.on("data", function(data) {
            html.push(data);
        })
        resp.on("end", function() {
            var buffer = Buffer.concat(html);
            zlib.gunzip(buffer, function(err, decoded) {
                console.log(decoded.toString());// gzip解壓後的html文本

                
            })
        }).on("error", function() {
            console.log("獲取失敗")
        })
    });

    // 超時處理
    req.setTimeout(5000,function(){
        req.abort();
    });

    // 出錯處理
    req.on('error',function(err){
        if(err.code=="ECONNRESET"){
            console.log('socket端口鏈接超時。');
        }else{
            console.log('請求發生錯誤,err.code:'+err.code);
        }
    });

    // 請求結束
    req.end();
}

// 調用start函數,程序開始
start();

參考文檔:socket

http://blog.csdn.net/u012935179/article/details/74022000函數

相關文章
相關標籤/搜索