码迷,mamicode.com
首页 > 其他好文 > 详细

Node爬虫——利用superagent模拟登陆

时间:2015-05-18 20:37:59      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

一、概述

  最近学习了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
          })
};

 

Node爬虫——利用superagent模拟登陆

标签:

原文地址:http://www.cnblogs.com/chenrj23/p/4512853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!