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,证明模拟登陆成功
大部分网站,只要研究透了他的登陆和反爬虫机制都能搞定。只是大部分。。。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

意外金喜

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值