iT邦幫忙

4

Node.js 幾個另類的應用

1.使用nodejs將html5 canvas base64編碼圖片保存為文件
2.谷歌2億2千5百萬用戶ID遭曝光
3.nodejs 如何讀取遠程的圖片並顯示出來?
1.nodejs 將 canvas 圖片保存為文件
內容摘要:

目前流行的“你畫我猜”應用,你有沒有想過使用HTML5來實現過?那麼不可避免的需要解決canvas保存圖片到硬盤或mongodb之類的數據庫。本文主要介紹使用nodejs將html5 canvas base64編碼圖片保存為文件,同時提供兩種解決方案。

實現方式:

var express = require('express');
var fs = require("fs");
var app = module.exports = express();
//配置
app.configure(function(){
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session());
  app.use(app.router);
  app.use(express.static(__dirname + '/up')); //靜態文件目錄
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
//保存base64圖片POST方法
app.post('/upload', function(req, res){
    //接收前台POST過來的base64
    var imgData = req.body.imgData;
    //過濾data:URL
    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
    var dataBuffer = new Buffer(base64Data, 'base64');
    fs.writeFile("out.png", dataBuffer, function(err) {
        if(err){
          res.send(err);
        }else{
          res.send("保存成功!");
        }
    });
});
if (!module.parent) {
  app.listen(8000);
  console.log('Express started on port 8000');
}

2.圖片代理 讀取遠程的圖片並顯示出來
內容摘要:

現在需要這樣一個功能: 通過 GET 參數 "url" , 讀取圖片並顯示圖片

程式碼(問題已解決):

var http = require('http');
var url = require('url');
http.createServer(function(req, res) {

    var params = url.parse(req.url, true);

    var IMGS = new imageServer(http, url);

    IMGS.http(params.query.url, function(data) {
        res.writeHead(200, {"Content-Type": data.type});
        res.write(data.body, "binary");
        res.end();
    });

}).listen(8124);

var imageServer = function(http, url) {
    var _url = url;
    var _http = http;

    this.http = function(url, callback, method) {
        method = method || 'GET';
        callback = callback ||
        function() {};
        var urlData = _url.parse(url);
        var request = _http.createClient(80, urlData.host).
        request(method, urlData.pathname, {
            "host": urlData.host
        });

        request.end();

        request.on('response', function(response) {
            var type = response.headers["content-type"],
                body = "";
            response.setEncoding('binary');
            response.on('end', function() {
                var data = {
                    type: type,
                    body: body
                };
                callback(data);

            });
            response.on('data', function(chunk) {
                if (response.statusCode == 200) body += chunk;
            });
        });

    };
};

3.僅 71 行(包含註釋)的 nodejs 腳本,抓取 Google Plus 上的大量ID
內容摘要:

英國人Robert Pitt今早在Github上公佈了他的爬蟲腳本,導致任何人都可以容易地取得Google Plus的大量公開用戶的ID信息。至今大概有2億2千5百萬用戶ID遭曝光。早在幾個月之前Robert就向谷歌報告此漏洞,谷歌放任自流,遭此劫數。

爬蟲腳本:

/*
 * Google Profile Information Fun
*/

/*
 * Require Libraries
*/
var http	= require('http');
var url		= require('url');
var fs		= require('fs');
var locRegex = new RegExp("<loc>(.*?)</loc>","gi");
var packages = [];

/*
 * Starting Link
*/
var baseOptions = {
	host : 'www.gstatic.com',
	port : 80,
	path : '/s2/sitemaps/profiles-sitemap.xml'
};

http.get(baseOptions, function(response){
	if(response.statusCode != 200)
	{
		console.error("Initial stack was not found");
		process.exit();
	};

	var stack = '';
	response.on('data', function(chunk){
		stack += chunk;
	});

	response.on('end', function(){
		var match = null;

		while(match = locRegex.exec(stack))
		{
			packages.push(match[1]);
		}

		processPackages();
	});
}).on('error', function(e) {
    console.log("Got error<getting base>: " + e.message);
});

var processPackages = function()
{
	var totalPackages = packages.length;
	for(var i = 0; i < packages.length; i++)
	{
		var requestOptions = url.parse(packages[i]);

		(function(index){ //Do not use i inside thise scope.. noob
			http.get(requestOptions, function(response){
				if(response.statusCode != 200)
				{
					console.log("failed to get package form google");
					return;
				}

				response.pipe(fs.createWriteStream("./data/segment_" + index + ".txt"));
				console.log("Piping " + index + " of " + totalPackages * index + " into ./data/segment_" + index + ".txt");
			}).on('error', function(e) {
    console.log("Got error<getting packages>: " + e.message);
});
		})(i);
	}
}

2 則留言

0
timloo
iT邦研究生 2 級 ‧ 2012-04-24 16:21:26

導致任何人都可以容易地取得Google Plus的大量公開用戶的ID信息。至今大概有2億2千5百萬用戶ID遭曝光。

用戶的ID信息是指那些呢? 帳/密??還是mail Addr?
常用的關鍵字? 私密的照片?(無名正妹照),還是銀行帳戶??

這70行,看不太出來,取出了那些訊息??

培根 iT邦新手 3 級 ‧ 2012-04-24 19:36:09 檢舉

其實就是 "用戶的ID"
我實際執行的抓到資料如下
https://plus.google.com/用戶ID
or
https://profiles.google.com/用戶ID

0
kkdayy_55330
iT邦新手 5 級 ‧ 2019-03-29 15:57:00

您好,

請問這裡的requestOptions是什麼意思呢?
var requestOptions = url.parse(packages[i]);

我要留言

立即登入留言