Node.js 使用http客戶端獲得網站的圖片下載到本地

如下代碼有些冗餘,你們撿核心看就好。服務器

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

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

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

// 請求參數JSON
var options;

// 請求並得到數據
var req;

// 存儲頁碼
var index=4;

function downloadImg(pageNumber){
    console.log("開始讀取第"+pageNumber+"頁");

    // http://images2017.cnblogs.com/blog/162475/201709/162475-20170929115047356-360094413.png // 實際圖片地址
    options={
        hostname:'images2017.cnblogs.com',// 這裏別加http://,不然會出現ENOTFOUND錯誤
            port:80,
            path:'/blog/162475/201709/162475-20170929115047356-360094413.png',// 子路徑
          method:'GET',
    };
    
    req=http.request(options,function(resp){
        var imgData = "";
        resp.setEncoding("binary"); 

        resp.on('data',function(chunk){
            imgData+=chunk;            
        });

        resp.on('end',function(){
            fs.writeFile("162475-20170929115047356-360094413.png", imgData, "binary", function(err){
                if(err){
                    console.log("文件下載失敗.");
                }
                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();
}

// 包一層函數
function start(i){
    downloadImg(i);
}

// 開始遍歷
start(index);

2017年9月30日10:31:31socket

相關文章
相關標籤/搜索