nodejs模拟登录-request模块

先看代码

/**
 * nodejs的request模块模拟登陆开源中国
 */
//密码加密模块
let CryptoJS = require('crypto-js');
let request = require('request');
//登陆post地址
let url = 'https://www.oschina.net/action/user/hash_login?from=';
//登陆的用户邮箱和密码
let user = {
  email: '[email protected]',
  pwd: '*********',
};
//登陆post的所有数据
let datas = {
  email: user.email,
  pwd: CryptoJS.SHA1(user.pwd).toString(),
  verifyCode: '',
  save_login: 1,
};

//设置头部
let headers = {
  'User-Agent': `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36`,
};

let opts = {
  url: url,
  method: 'POST',
  headers: headers,
  form: datas,
};

//模拟登陆
request(opts, (e, r, b) => {
  // console.log(r.headers['set-cookie']);
  //登陆后访问首页
  let opts = {
    url: "https://www.oschina.net/",
    headers: {
      'User-Agent': `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36`,
      Cookie: r.headers['set-cookie'], //这里是登陆后得到的cookie,(重点)
    }
  };
  request(opts, (e, r, b) => {
    console.log('是否登陆成功:', b.indexOf('意外金喜') > 0);
  });
});


介绍

本文nodejs模拟登陆使用的模块:
模拟登陆:request - 官网:https://www.npmjs.com/package/request
密码加密:crypto-js - 官网:https://www.npmjs.com/package/crypto-js
一般网站模拟登陆都是获取到登陆后的cookie,然后就可以模拟登陆网站了。

网站分析

用户模拟登陆,
首先要有用户名和密码,本文使用的是邮箱和密码登陆。
然后要获得登陆post的url,
开源中国的是:https://www.oschina.net/action/user/hash_login?from=
这个url是怎么获得的呢?登陆了后会重定向,就找不到原来的url了。这里介绍一个小技巧,
使用谷歌浏览器,打开登陆的页面,F12,选择Network,勾上Preserve log
nodejs模拟登录-request模块_第1张图片
然后输入邮箱,密码再点登陆,工具就会记录所有的url
nodejs模拟登录-request模块_第2张图片
到这里就得到了登陆的url登陆需要传递的参数。这密码是经过加密后的,继续探索网站,
看网站是使用的什么加密?

加密分析

回到登陆页面:https://www.oschina.net/home/login
审查页面的登陆button,
nodejs模拟登录-request模块_第3张图片
目测是根据btn-login这class绑定登陆事件的,不要问为什么。
然后开发者工具选择Sources,里面有页面所有的资源包括css,js,图片等。
在里面一个一个的js文件里搜索btn-login这字符串,最终找到了登陆的方法。
nodejs模拟登录-request模块_第4张图片

到这里就能看到密码是用的CryptoJS.SHA1加密,正好,nodejs有这加密模块crypto-js

获取登陆后的cookie

上面的代码:r.headers['set-cookie']就是获取登陆后的cookie。
打印出来是这样子的:
nodejs模拟登录-request模块_第5张图片

访问首页

headers带上登陆后得到的cookie,访问首页。我的开源中国用户名也是意外金喜。
判断了下访问首页后的html是否包含他:
console.log('是否登陆成功:', b.indexOf('意外金喜') > 0);
值为 true,证明模拟登陆成功
大部分网站,只要研究透了他的登陆和反爬虫机制都能搞定。只是大部分。。。

意外金喜的博客:http://blog.csdn.net/zzwwjjdj1

你可能感兴趣的:(nodejs,node.js开发,nodejs开发)