标签:
一、概述
最近学习了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 }) };
标签:
原文地址:http://www.cnblogs.com/chenrj23/p/4512853.html