用 request 模块遇到网站的 vue 的$nextTick(),无法获取返回数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yxnwh
V2EX    Node.js

用 request 模块遇到网站的 vue 的$nextTick(),无法获取返回数据

  •  
  •   yxnwh 2022-01-12 18:52:07 +08:00 7934 次点击
    这是一个创建于 1404 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网站: https://www.kejiwanjia.com/mission/today

    现象描述:

    通过 fiddler 抓包,得到该网站的签到链接为: https://www.kejiwanjia.com/wp-json/b2/v1/userMission
    熟练的构造好所需的 cookie 和其他 headers ,以及 useragent 后,第二天 post 发送构造好的链接,结果一直返回前一天的签到值,登录网页后,发现实际未签到,保持网页的登录状态,返回 fiddler 再 post 一次构造链接,结果顺利签到。。。


    情况分析:
    分析 fiddler 抓到的相关 html 和 js 文件,发现主要的可疑点见下图


    imgur.com/a/M3nZSe4


    深度分析 aka 小白的一派胡言:
    直接 post 发送构造链接,因为$nextTick()的存在,导致服务器无法返回最新的 response ,而是继续返回前一天签到成功后的 response


    最后附上我的核心代码


    imgur.com/a/5SGcCYB


    希望各位大佬提供下解题思路
    第 1 条附言    2022-01-13 09:11:55 +08:00
    经过 @maichael 的提示,已经顺利完成签到,非常感谢!

    源代码就不贴了,如果在这个网站真有看帖发帖需求,给博主充值 6 元获得超级金主称号,即可随意看帖发帖

    简单说一下签到实现思路,懂得都懂吧~

    1. 分析下含有 jwt-auth 这个关键字的链接
    2. 分析下含有 getUserMission 这个关键字的链接
    3. 分析下含有 UserMission 这个关键字的链接
    12 条回复    2022-01-13 11:10:39 +08:00
    liliclinton
        1
    liliclinton  
       2022-01-12 18:57:56 +08:00
    和 vue 无关
    yxnwh
        2
    yxnwh  
    OP
       2022-01-12 18:59:03 +08:00
    @liliclinton 好吧,我果然是在一派胡言。。。
    shenyu1996
        3
    shenyu1996  
       2022-01-12 19:30:27 +08:00
    试试把登录流程也加上呢 接口拿到实时的 token 再走 sign
    yxnwh     4
    yxnwh  
    OP
       2022-01-12 19:35:15 +08:00
    @shenyu1996 有的,那个很简单就没贴,思路就是通过 username 和 password ,拿到实时 token ,拿到的 token 再传到这个 sign 函数里面,拼接成 authorization ,就可以签到了

    很奇怪的地方就是,直接 post 构造链接,无论如何都不能签到,但一旦登录次,再 post 链接,马上就能签到成功
    powersee
        5
    powersee  
       2022-01-12 19:50:21 +08:00 via Android
    刚好最近也研究这个网站的签到,其实只需要 authorization 就行的,不需要 cookie 也能签到。不过这网站登录一次的有效时长只有 3 天左右好像。估计只能按照你上面的思路,先弄好登录这一步才行。
    yxnwh
        6
    yxnwh  
    OP
       2022-01-12 20:19:37 +08:00
    登录这一步,你可以在抓包时关注下含有 jwj-auth 这个关键词的网址,会有惊喜
    yxnwh
        7
    yxnwh  
    OP
       2022-01-12 20:20:04 +08:00
    @yxnwh jwt-auth
    maichael
        8
    maichael  
       2022-01-12 20:20:15 +08:00
    1. 和 vue 没关系
    2. 没报 403 ,token 应该没问题
    3. 如果已经登录的直接打开页面也能签到,说明跟登录接口没什么关系,应该是有一个前置接口没有调用,而这个接口在登录状态打开页面会自动调用,可以再看看登录状态下打开页面调用了那些接口。
    yxnwh
        9
    yxnwh  
    OP
       2022-01-12 20:24:05 +08:00
    @maichael 多谢大佬的思路,我在 fiddler 抓包时,发现登录网页后,stream 流里面还紧跟着一个登录 hi.kejiwanjia.com 链接的 login 信息,我试试把这个 login 也写进去
    powersee
        10
    powersee  
       2022-01-12 21:26:33 +08:00
    那就容易了,先使用 post 去登录,然后它返回的内容里有 token 的值,用 'Bearer ' + token 就是 authorization

    然后再用这个 authorization 去 post 签到的那个接口就可以了
    yxnwh
        11
    yxnwh  
    OP
       2022-01-13 09:07:11 +08:00
    @maichael 再次感谢大佬,昨晚分析了一会,大致是这个流程(小白个人分析,不一定完全对):这个网站是先调用了 getUserMission 这个接口,获取服务器端用户的一些数据(等级,积分,用户名等等)其中包含了 mission 字段,随后再调用 UserMission 接口签到,并将签到数据写入 mission 字段,从而实现用户签到数据的更新,如果不经调用 getuserinfo 这个接口,则导致无法获得 mission 字段,进而导致签到后的数据无法写入
    gadfly3173
        12
    gadfly3173  
       2022-01-13 11:10:39 +08:00
    nexttick 的作用是等待 DOM 更新后再执行操作,你把它当成 setTimeout 来看就可以
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     825 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 21:35 PVG 05:35 LAX 13:35 JFK 16:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86