python实现调⽤js并获取参数
最近接到⼀个⼩项⽬,⽤python实现⼀些底层接⼝,完成数据获取与数据封装,其实本来也不难,其中有⼀块是要利⽤python实现获取⼀个加密签名,再传到第三⽅接⼝,获取token,其中它的前端加密算法中有⼀个是利⽤crypto.js进⾏⼀些列加密,这样其实⽐较难搞。于是便想利⽤python来实现调⽤js⽣成加密签名,再进⾏结果回传,查询了⼀些⽅案并进⾏实施,最终获得了想要的结果,特此分享出来。
1.js⽂件引⼊crypto.js⽂件
let Crypto = require("./../node_modules/crypto.js");
const id="4QF88sui99kuiOH";//id
const ts=((new Date()).valueOf().toString()).substr(0,10);//获取当前时间戳
原生js和js的区别const signStr ="id="+id+"&ts="+ts;
//封装参数
function tokenObject(id,ts,signature){
this.id = id;
this.ts = ts;
this.signature =signature;
}
//获取签名
function getSignature() {
let signature = md5encode(signStr);
let token = new tokenObject(id,ts,signature);
return token;
}
//利⽤crypto.js进⾏MD5加密
function md5encode(word) {
return Crypto.md5(word).toString();
}
这⾥的crypto.js引⼊最好以npm⽅式进⾏安装,可能需要安装⼀些依赖包,所以最好将babel这种相关依赖⼀并安装,利⽤npm安装crypto.js时代码如下:
npm install crypto.js --save
这⾥⼀定要注意,在npm⾥搜索crypto时,会出现两种类型⽐较相似的包,⼀个是crypto.js(原⽣crypto加密模块的⼆次封装,简化常⽤加密函数的使⽤),另⼀个是crypto-js,这两个看起来相似,我⼀度以为是⼀个,但加密的结果不⼀样,后续我出个⽂分析这两个的区别。这⾥⽤的是crypto.js。这样js⽂件已经准备好了,记得在js⽂件⾥调⽤函数,要不获取不到相关数据。
2. python读取脚本⽂件库的引⼊
因为项⽬需求⽤python2.7来进⾏实现,所以我们使⽤的语法是基于python2。我们使⽤的运⾏js的脚本库为execjs,这个库⽀持python2和python3。具体安装⽅法有多种,这⾥介绍⼀种,利⽤命令⾏进⼊安装python的Scripts⽂件夹下,我的是D:\python2.7\Scripts,输⼊:
pip install PyExecJS
我的已经安装好了,输⼊会出现以下结果,如果没有安装,则会进⾏安装。
安装好以后,python代码如下:
import execjs
import requests
import json
//读取并编译js⽂件,运⾏js内函数获得想要的结果
def getSignatureString():
jsstr = ReadJs()
ctx = execjspile(jsstr)
signature =json.dumps(ctx.call("getSignature"))//上⾯那个js⽂件中,这个⽅法⽤来获取签名
return signature
//读取JS⽂件,将js代码转换
def ReadJs():
jsfile = open("./../javascript/getSignature.js","r")//打开js所在⽂件,⽅式以只读⽅式打开
codeline = adline()
codestr=""
while codeline:
codestr =codestr +codeline
codeline =adline()
return codestr
//将运⾏js获得的ts与signature参数取回来,转换成字典形式,在传递到获取token接⼝
def getCode():
url=""
id = "4QF88sui99kuiOH"
dict_json =json.loads(getSignatureString())
params = {"id": id, "ts": dict_json['ts'], "signature": dict_json['signature']}
result = requests.post(url, data=params )
response_dic =
success_object =json.loads(response_dic)
return success_object
这样就可对这个python⽂件进⾏运⾏了,记得在当前⽂件中调⽤这个函数。本⽂也是最近项⽬上的⼀个⼩实现,如果好⽅法,请多指教。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论