Node爬蟲——利用superagent模擬登陸


一、概述

  最近學習了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
          })
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM