nodejs模拟登录-request模块

58 篇文章 16 订阅
57 篇文章 34 订阅

先看代码

/**
 * 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: '452076103@qq.com',
  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('<span class="name">意外金喜</span>') > 0);
  });
});


介绍

本文nodejs模拟登陆使用的模块:
一般网站模拟登陆都是获取到登陆后的cookie,然后就可以模拟登陆网站了。

网站分析

用户模拟登陆,
首先要有用户名和密码,本文使用的是邮箱和密码登陆。
然后要获得登陆post的url,
开源中国的是:https://www.oschina.net/action/user/hash_login?from=
这个url是怎么获得的呢?登陆了后会重定向,就找不到原来的url了。这里介绍一个小技巧,
使用谷歌浏览器,打开登陆的页面,F12,选择Network,勾上Preserve log

然后输入邮箱,密码再点登陆,工具就会记录所有的url

到这里就得到了登陆的url登陆需要传递的参数。这密码是经过加密后的,继续探索网站,
看网站是使用的什么加密?

加密分析

回到登陆页面:https://www.oschina.net/home/login
审查页面的登陆button,

目测是根据btn-login这class绑定登陆事件的,不要问为什么。大笑
然后开发者工具选择Sources,里面有页面所有的资源包括css,js,图片等。
在里面一个一个的js文件里搜索btn-login这字符串,最终找到了登陆的方法。


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

获取登陆后的cookie

上面的代码:r.headers['set-cookie']就是获取登陆后的cookie。
打印出来是这样子的:

访问首页

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

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值