某驾考学习网站的逆向

通过浏览器的控制台 很方便的获取到请求数据的接口 把接口拿来请求发现请求3次就不行了,提示重复使用 看来他的url的参数有经过验证。这时候就需要找到他的验证方式 自己生成key。

这个_r就是请求的验证的参数 那怎么找到这个_r的生成方式呢? 

很简单直接在网络的面板按住ctrl+f进行搜索这个_r

很幸运 在main.js 的第一个就找到了这个_r的方法 

只有在这个地方打个断点 就能知道这个方法是否是生成这个_r参数的方法,通过右键在源面板打开

断住了 依次步进

先在控制台测试一下这个方法 果然成功了 OK   把这个方法复制到python脚本

测试脚本 这里就不提供真实的url了

import requests
import execjs

hearders = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
}
ctx = execjs.compile("""
        function c(t) {
        var a, i, n = Math.abs(parseInt((new Date).getTime() * Math.random() * 1e4)).toString(), o = 0;
        for (a = 0; a < n.length; a++)
            o += parseInt(n[a]);
        return i = function(t) {
            return function(a, i) {
                return i - "" + a.length <= 0 ? a : (t[i] || (t[i] = Array(i + 1).join(0))) + a
            }
        }([]),
        o += n.length,
        o = i(o, 3 - o.toString().length),
        t.toString() + n + o
    }
""")
def getIds():
    url1 = f"https://****?_r={ctx.call('c',1)}&carStyle=xiaoche&carType=car&cityCode=110000&course=kemu1&kemuStyle=kemu1"
    req1 = requests.get(url1).json()
    data = req1['data']
    print(data[0:10])
    questionIds = ','.join(map(str, data[0:10]))

    url2 = f"https://****?_r={ctx.call('c',1)}&carType=car&course=kemu1&questionIds={questionIds}"
    req2 = requests.get(url2).json()
    print(req2)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值