nodejs模拟登录

不借用其他库,nodejs原生模拟登录伯乐在线

思路: http原生有get和request方法可以构造GET和POST请求,我们首先分析网站登录入口,然后用自己的用户名,密码等一些必要信息(有事还会有hidden的input,他们大部分都是来防范跨站请求伪造的)自己模拟数据,然后发送请求,获取网站给你的cookie,成功登录之后,你就能为所欲为了。

直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
let http = require('http');


//构造请求参数
let options = {
hostname:'www.jobbole.com',
method:'POST',
path:'/wp-admin/admin-ajax.php', //为什么这么像wordpress的用户台。。后来看了一下,jobbole用了很多wordpress模块,还有好多的jQuery
headers:{
'Content-Type':'application/x-www-form-urlencoded',//表单格式
'User-Agent':'Mozilla/5.0 (Macintosh)',//浏览器头
}
}
//jobbole登录用的是ajax登录,然后登录成功之后再location.href='http://www.jobbole.com/'跳到首页,感觉有点多此一举。

//这是ajax POST需要的数据
let postData = {
action: 'user_login',
user_login:'你的用户名',
user_pass:'你的密码',
remember_me:1,//0 是不记住登录
redirect_url:'http://www.jobbole.com/'
};

构造请求函数
let request = http.request(options,(res)=>{
res.setEncoding('utf-8');//网站响应的res是Buffer,这里我们将它设置为utf-8格式
console.log(`状态码:${res.statusCode}`);
let cookies = res.headers['Set-Cookie'];//这个就是关键了,能获取到网站返回响应的Set-Cookie头;
let body = '';//res是可读流,我们通过绑定data事件的方式,获取每次data触发传过来的chunk
res.on('data',(chunk)=>{
body += chunk;
});
res.on('end',()=>{
console.log('响应结束啦...');//body就是响应拼接起来的字符串,如果需要json格式,直接JSON.parse就获取到了.
visitHome(cookies);//在这里我们获取到的cookie去登录网站主页,
})
}) ;
request.write(querystring.stringify(postDate));//写入需要post的数据
request.end();//request需要调用end才能发送请求,get方式就不用
function visitHome(cookies){
let options = {
hostname:'www.jobbole.com',
path:'/',//访问首页
headers:{
'cookie':cookies.join()//由于cookies是数组形式,所以我们将它转换为字符串
}
};
//这次我们直接用GET请求
http.get(options,(res)=>{
let html = '';
res.on('data',(chunk)=>{
html+=chunk;
});
res.on('end',()=>{
console.log(html);//这就是我们获取到的主页啦,如果不出意外,现在就已经是登录的状态啦,以后你发送请求,都加上这个cookie,你就能享受到登录之后的用户权限了
})
})
}

##完。