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: '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('意外金喜') > 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然后输入邮箱,密码再点登陆,工具就会记录所有的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('意外金喜') > 0); 值为 true,证明模拟登陆成功。 大部分网站,只要研究透了他的登陆和反爬虫机制都能搞定。只是大部分。。。本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
