一、概述
最近學習了node,試着寫了個爬蟲,這是模擬登陸的一部分。
1、需要的工具
2、superagent用法的簡述
3、抓包分析
4、最小示例
二、需要的工具
nodejs,superagent,wireshark。
nodejs沒什么可介紹的。
superagent是nodejs眾多插件之一,用npm命令安裝。是一個超輕的ajax api,有着可讀性強,高度靈活,學習曲線低的優點。
wireshark是一個抓包工具,很強大。之后我們需要用它來分析post請求與cookie。
三、superagent用法的簡述
以下是最簡單的用法。
向本地“/search”發出get請求,end()內的是回調函數。
request('GET', '/search').end(callback); //or request .get('/search') .end(function(err, res){ });
這是post請求,set是設置http的header,之后我們cookie就是靠這個設置的。send是post傳送的參數
request.post('/user') .set('Content-Type', 'application/json') .send('{"name":"tj","pet":"tobi"}') .end(callback)
更具體的可以見文檔。
四、抓包分析
在我們登錄網站的時候,其向我們發送的response中會設置cookie,用來之后的瀏覽中驗證我們的身份。
因此我們不僅僅需要利用post模擬登錄,更要保存好其發給我們的cookie,在之后的請求中將其設置在請求頭中。
紅色框框中就是我們需要保存下來的cookie。
五、最小示例
var superagent = require('superagent'); var events = require("events"); var emitter = new events.EventEmitter() setCookeie (); emitter.on("setCookeie", getTitles) //監聽setCookeie事件 function setCookeie () { superagent.post('http://www.ourob.cn/bbs/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1') //學校里的一個論壇,這是登錄提交地址 .type("form") .send({fastloginfield:"username"}) .send({username:"foo"}) //這肯定不是我真的用戶名和密碼啦 .send({password:"bar"}) .send({quickforward:"yes"}) .send({handlekey:"ls"}) .end(function(err, res){ if (err) throw err; var cookie = res.header['set-cookie'] //從response中得到cookie emitter.emit("setCookeie", cookie) }) } function getTitles (cookie) { superagent.get("http://www.ourob.cn/bbs/forum.php?mod=forumdisplay&fid=82&filter=typeid&typeid=185") //隨便論壇里的一個地址 .set("Cookie", cookie[3]) //在resquest中設置得到的cookie,只設置第四個足以(具體情況具體分析) .end(function(err, res){ if (err){ throw err; }; //do something }) };