当前位置: 首页 > 知识库问答 >
问题:

javascript - js逆向,python中调用获取不到值?

吴欣悦
2023-09-03

js代码:

function get_sign(url) {    let req = {        "url": url,        "method": "get",        "data": null,        "headers": null    }    window.H5guard.sign(req).then(res =>{        d = res.headers.mtgsig    })    return}

python代码:

import execjswith open('./mtgisg.js','r', encoding='UTF-8') as f:    js_code = f.read()ctx = execjs.compile(js_code)url = ""result = ctx.call('get_sign',url)print(result)

输出结果:
image.png

这其中是一个逆向操作,使用execjs调用js里的函数,但是js函数中纯在异步这个问题,需要d这个值在get_sign中返回,其中d是string类型,请问大佬们怎么实现,难住孩子了,就是这里js里要怎么改呢?

共有1个答案

顾超
2023-09-03

先用一个promise函数处理下异步操作,比如说可以这么改js

function get_sign(url) {    let req = {        "url": url,        "method": "get",        "data": null,        "headers": null    }    return new Promise((resolve, reject) => {        window.H5guard.sign(req).then(res =>{            d = res.headers.mtgsig            resolve(d)        })        .catch(error => {            reject(error)        })    })}

这个时候,你能发现get_sign函数返回一个Promise对象,好了,当异步操作完成后,再调用resolve函数返回d的值。

然后在python代码中写一个逻辑调用get_sign函数时,使用async或者await来处理异步操作

import asyncioimport execjsasync def main():    with open('./mtgisg.js','r', encoding='UTF-8') as f:        js_code = f.read()    ctx = execjs.compile(js_code)    url = ""    result = await ctx.call_async('get_sign',url)    print(result)asyncio.run(main())

这个地方我们调用js函数时,使用ctx.call_async代替ctx.call,这样就可以使用await等待异步操作的结果了(关于这几个函数的替换,用法,可以详细看看微软的msdn或者火狐的mdn博客)同时,为了使用async或者是await,需要将main函数声明为一个异步函数,并且使用asyncio模块的run函数来运行它,就可以搞定了。

 类似资料:
  • 问题内容: 我的问题的一个具体示例是“在此示例中如何获得‘3210’?” 我可以写foo [4:0:-1],foo [5:1:-1]等并得到我期望的结果,这似乎很奇怪,但是无法编写切片以便得到‘3210 ‘。 一个临时的方法是foo [0:4] [::-1],但这会在进程中创建两个字符串对象。我实际上将执行此操作数十亿次,因此每个字符串操作都非常昂贵。 我一定想念一些愚蠢而轻松的事情。谢谢你的帮助

  • 问题内容: 我尝试使用FirebaseUI-Android库简单地在回收视图中显示数据集。 借助push()方法,数据以列表形式存储在Firebase中。 当我获得数据时,我首先获得了最早的数据,而我的要求则是最年轻的。所以我需要一个相反的顺序。 有没有办法用FirebaseUI本身做到这一点? 使用Firebase Core,似乎只有两种可能的方法是(从Display帖子按降序排列): @Kat

  • dll来源: https://www.irfanview.com/plugins.htm#UpdatedPlugins 我想调用WebP.dll来解析webp的图片提供给web页面展示,webp只是测试,目标格式为psd、jxl等浏览器不支持的格式 IDA: 比如这个 ScanWEBP_W ReadWebP_W 但我尝试调用程序就崩溃了(我没有相关知识,代码来源网络) 请问我该怎么调用呢? 谢谢

  • 问题内容: 我有一个标准的javascript ajax调用,其中将data:设置为json数据。 我试图在php中获取数据,这是行不通的。 但是,可行。 我想知道这可能是我的框架或诸如此类的无法正常工作的东西吗?还是还有其他我可以用来获取数据的东西? 编辑: 因此,框架YII和扩展Restfullyii具有使用一种方法获取其数据的方法return json_decode(file_get_con

  • 我用Python和Pyplay做了一个简单的游戏。 游戏在两个方向(纵向和横向)上都有效,因为我在打开游戏时使用的方向是相同的。 如果我在游戏运行时旋转设备改变方向,所有东西都会出现在错误的位置。 问题是,我不知道如何检测设备是否已旋转以正确重画屏幕。 那么,我的问题是: 如何检测用户仅使用Python或PyGame代码旋转设备? 重要提示:建议不应与任何特定操作系统相关,因为相同的代码必须在带有

  • // axios 响应拦截 axiosInstance.interceptors.response.use( (res) => { 只打印出下面的数据, 实际上接口headers 返回了很多数据,为什么其他数据获取不到,如Access-Token属性?