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

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 execjs

with 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)

输出结果:
js逆向,python中调用获取不到值?

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


回答:

先用一个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 asyncio

import execjs

async 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函数来运行它,就可以搞定了。

以上是 js逆向,python中调用获取不到值? 的全部内容, 来源链接: utcz.com/p/939002.html

回到顶部