用NodeJS实现反爬虫,原理&源码放送

来源:岁月联盟 编辑:猪蛋儿 时间:2020-02-16
        //测试html文件
        if(url.indexOf("/test.html") !=- 1){
            //如果是此html文件,则对文件中的原始字体路径做保护
            //网页源码
            file_content = file_content.toString();
            //遍历变码矩阵,对网页中的文字进行变码
            for (var index in transfer_result){
                console.log(index,transfer_result[index]);
               
                //正则全局替换
                file_content = file_content.replace(new RegExp(transfer_result[index],"g"), index+";");
            }
           
            var count = (file_content.split('font_dest')).length - 1;
            console.log("replaced:",count);
            //以时间做为参照值
            var time_parm = (new Date).getTime();
            //字体路径保护,将正确路径font_dest替换为时间值
            file_content = file_content.replace(new RegExp("font_dest","g"), time_parm);
           
            //存入变型url特征池
            for(var i=0; i//内容head,写入mime
        res.writeHead(200,{"content-type":mime.getType(url)});
        console.log(url, "mime:", mime.getType(url));
        //内容
        res.write(file_content);
       
        res.end(); 
       
    }else{
        //get之外请求
        next();
    }
})
//post操作
app.post("/transform_ttf",function(req,res){
    console.log(req.body);
    //前端传入的、要变码的字
    var transform_words = req.body.transform_words.toString().split(",");
    //默认变码符号
    transform_words.push("。");
    //源和目标字体目录
    var ttf = "./admin/font_src/" + req.body.font_src;
    var new_ttf = "./admin/font_dest/" + req.body.font_dest;
    //变码结果
    transfer_result = transform_ttf(
        ttf,
        transform_words,
        new_ttf
    );
    console.log(transfer_result);
    //写入文件,给其名称:变码矩阵
    fs.writeFileSync("./config.js","exports.tramsform_matrix="+ JSON.stringify(transfer_result));
    res.send("transform complete!");
});
/**
 * express,结束
 */
代码中已有详细注释。
config.js是字体编码与文字对应关系,源码中称为“变码距阵”,内容如下:
exports.tramsform_matrix={"Ԕ":"我","ԕ":"你","Ԗ":"他","ԗ":"只","Ԙ":"保","ԙ":"码","Ԛ":"用","ԛ":"。"}
注:当进行动态变码操作时,此文件内容会发生变化。
admin目录下,是几个静态网页文件:

index.html内容如下:

上一页  [1] [2] [3] [4]  下一页