首页
社区
课程
招聘
[原创] 油猴脚本之论坛刷新token
2023-7-3 09:35 15656

[原创] 油猴脚本之论坛刷新token

2023-7-3 09:35
15656

前言

每当看到不错的帖子想收藏、点赞或者关注作者时,总是会遇到下面的问题
图片描述
看了下请求包,发现是每次请求都会带上csrf_token,但是因为token超时了所以操作失败。刷新页面后立即点赞等操作就能成功。作为一个懒癌不想每次都刷新,自然就想到写个油猴脚本在操作前先重新获取token,脚本不难,如下

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
// ==UserScript==
// @name         kanxue refresh token
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  kanxue refresh token
// @author       You
// @match        https://bbs.kanxue.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==
var jQuery = window.jQuery;
 
function RefreshToken(){
 var csrftoken = jQuery('meta[name="csrf-token"]').attr('content');
      var xmlhttp = new XMLHttpRequest();
      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == XMLHttpRequest.DONE) {
            if (xmlhttp.status == 200) {
                var response = jQuery(xmlhttp.responseText);
                var $csrfMeta = response.filter('meta[name="csrf-token"]');
                var new_csrftoken = $csrfMeta.attr('content');
                jQuery('meta[name="csrf-token"]').attr('content', new_csrftoken);
            }
            else if (xmlhttp.status == 400) {
                alert('There was an error 400');
            }
            else {
                alert('something else other than 200 was returned');
            }
        }
    };
 
    xmlhttp.open("GET", location.href, false);
    xmlhttp.send();
}
 
(function() {
    'use strict';
    var array = [".favorite", ".thumb" , ".follow_btn"];
    for(var i = 0; i < array.length; i++){
       jQuery(array[i]).on('click', function(event) {
       RefreshToken();
    })
    for(var j = 0; j < jQuery(array[i]).length; j++){
       var eventList = jQuery._data(jQuery(array[i])[j], "events");
       eventList.click.unshift(eventList.click.pop());
    }
 }
})();

讲下脚本为何这么写:
1.本来想用jQuery.ajax()来发包,结果发现返回包为空,对比下正常刷新页面的请求包,发现是"X-Requested-With: XMLHttpRequest"请求头导致的,所以改用XMLHttpRequest。
图片描述
图片描述
2.xmlhttp.open("GET", location.href, false)需要设置第三个参数为false,即同步请求,否则token还没来得及刷新,又会报token check error。
3.新添加的刷新token事件监听器在原监听器之后执行,所以需要调整监听器顺序,放在最前面。同时关注和点赞在侧边和底部都有,所以这两处都需要调整。

参考

https://stackoverflow.com/a/8567149
http://www.robeesworld.com/blog/67/changing-the-order-of-the-jquery-event-queue
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞12
打赏
分享
最新回复 (12)
雪    币: 12075
活跃值: (15434)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2023-7-3 10:26
2
0
感谢分享;你为了不点那一下,写了个这么长的脚本?
雪    币: 2391
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yeshuibo 2023-7-3 12:05
3
0
pureGavin 感谢分享;你为了不点那一下,写了个这么长的脚本?
哈哈对
雪    币: 32410
活跃值: (18725)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2023-7-4 13:23
4
0
欢迎多点赞
雪    币: 19410
活跃值: (29069)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-7-4 13:50
5
1
感谢分享
雪    币: 2391
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yeshuibo 2023-7-4 18:55
6
0

.

最后于 2023-7-4 18:56 被yeshuibo编辑 ,原因:
雪    币: 2391
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yeshuibo 2023-7-5 08:28
7
0
kanxue 欢迎多点赞[em_19]
必须的
雪    币: 3104
活跃值: (3767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
青眼白龙 2023-7-6 19:36
8
0
pureGavin 感谢分享;你为了不点那一下,写了个这么长的脚本?
哈哈哈,老强迫症了
雪    币: 508
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
猕猴桃80 2023-7-10 12:20
9
0
您好,请问有安卓逆向岗位兴趣吗?坐标 深圳宝安,有待回复;
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
逆向-新手 2023-7-26 21:08
10
0
大佬 请问题个问题:
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
逆向-新手 2023-7-26 21:08
11
0
大佬 请咨询个问题:
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
逆向-新手 2023-7-26 21:10
12
0
大佬咨询个问题:就是如果我可以获取到对方的csrftoken情况下,有什么好的方式可以绕过同源策略的限制将csrftoken添加到请求头里面发送不。对方网站有做同源策略的限制。是一个post请求
雪    币: 2093
活跃值: (1820)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
洪七公. 2023-10-7 17:13
13
1
游客
登录 | 注册 方可回帖
返回