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);
}
}
導致任何人都可以容易地取得Google Plus的大量公開用戶的ID信息。至今大概有2億2千5百萬用戶ID遭曝光。
用戶的ID信息是指那些呢? 帳/密??還是mail Addr?
常用的關鍵字? 私密的照片?(無名正妹照),還是銀行帳戶??
這70行,看不太出來,取出了那些訊息??
其實就是 "用戶的ID"
我實際執行的抓到資料如下
https://plus.google.com/用戶ID
or
https://profiles.google.com/用戶ID
您好,
請問這裡的requestOptions是什麼意思呢?var requestOptions = url.parse(packages[i]);