使用 Node.js 模拟执行 JavaScript

准备工作

正确安装好 Node.js ,安装好之后,能正常使用 node 和 npm 两个命令

模拟执行

关于案例分析

写文章-CSDN创作中心

这里就不做分析了,直接使用

我们的目的是: 使用 node.js 加载 Crypto 库, 并执行 getToken 方法

首先,把 crypto-js.min.js 内容复制下来, 新建一个 crypto.js 文件 并把内容粘贴进去,然后新建一个 main.js 文件

复制代码
const CryptoJS = require('../Python 执行 JS/crypto')
function getToken(player) {
    let key = CryptoJS.enc.Utf8.parse("fipFfVsZsTda94hJNKJfLoaqyqMZFFimwLt");
    const {name, birthday, height, weight} = player;
    let base64Name = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(name));
    let encrypted = CryptoJS.DES.encrypt(
        `${base64Name}${birthday}${height}${weight}`,
        key,
        {
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7,
        }
    );
    return encrypted.toString();
}

const player = {
    'name': '凯文-杜兰特',
    'image': 'durant.png',
    'birthday': '1988-09-29',
    'height': '208cm',
    'weight': '108.9KG'
}

console.log(getToken(player))

这里我们直接使用 Node.js 中的 require 方法导入 creypto.js 这个文件, 然后将其赋值为 CryptoJS 对象, 这样其实就完成了 CryptoJS 对象的初始化了, 后面我们就可以正常使用 CryptoJS 对象了

运行 main.js

node main.js
DG1uMMq1M7OeHhds71HlSMHOoI2tFpWCB4ApP00cVFqptmlFKjFu9RluHo2w3mUw

搭建服务

我们现在已经能够使用 Node.js 完成整个加密字符串生成了,但是如果此时我们想用 Python 来编写整个爬虫, 我们可以直接使用 Node.js 把刚才的算法暴露成一个 HTTP 服务,就好了, 这样的话 Python 直接调用 Node.js 暴露的 HTTP 服务, 通过 Request Body 传入对应球员信息, 然后加密字符串通过 HTTP 的 Response 返回即可

Node.js 中最流行的 HTTP 服务框架单数 express 了

安装 : npm i express

然后改写 main.js 内容

复制代码
const CryptoJS = require('../Python 执行 JS/crypto');
const express = require("express");
const app = express();
const port = 3000
app.use(express.json())
function getToken(player) {
    let key = CryptoJS.enc.Utf8.parse("fipFfVsZsTda94hJNKJfLoaqyqMZFFimwLt");
    const {name, birthday, height, weight} = player;
    let base64Name = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(name));
    let encrypted = CryptoJS.DES.encrypt(
        `${base64Name}${birthday}${height}${weight}`,
        key,
        {
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7,
        }
    );
    return encrypted.toString();
}

app.post("/", (req, res) => {
    const data = req.body
    res.send(getToken(data));
});
app.listen(port, () => {
    console.log(`Example app listening on port ${port}!`);
})

这里我们使用 express 编写了一个服务, 它可以接收一个 POST 请求, Request Body 就是球员的信息, 然后返回 getToken 的计算结果作为 Response 的内容

接下来重新运行 main.js

可以看到,express 就在本地 3000 端口运行了

如果我们想用 Python 调用的话, 直接使用 requests 调用该 API ,然后传入对应的球员数据即可

复制代码
import requests

data = {
    'name': '凯文-杜兰特',
    'image': 'durant.png',
    'birthday': '1988-09-29',
    'height': '208cm',
    'weight': '108.9KG'
}
url = 'http://127.0.0.1:3000'
response = requests.post(url, json=data)
print(response.text)

DG1uMMq1M7OeHhds71HlSMHOoI2tFpWCB4ApP00cVFqptmlFKjFu9RluHo2w3mUw

结果是一样的

相关推荐
Clown95几秒前
go-zero(十八)结合Elasticsearch实现高效数据检索
开发语言·elasticsearch·golang
愚润求学几秒前
【Linux】动静态库的使用
linux·运维·服务器·开发语言·c++·笔记
写代码写到手抽筋11 分钟前
C++性能优化之访存优化(未完)
开发语言·c++
Dovis(誓平步青云)24 分钟前
基于面向对象设计的C++日期推算引擎:精准高效的时间运算实现与运算重载工程化实践
开发语言·c++·经验分享·笔记
不爱吃饭爱吃菜24 分钟前
uniapp微信小程序-长按按钮百度语音识别回显文字
前端·javascript·vue.js·百度·微信小程序·uni-app·语音识别
夜晚中的人海37 分钟前
【C语言】初阶数据结构相关习题(二)
c语言·开发语言·数据结构
武昌库里写JAVA1 小时前
MacOS Python3安装
java·开发语言·spring boot·学习·课程设计
Dxy12393102161 小时前
python如何设置excel单元格边框样式
开发语言·python·excel
低代码布道师1 小时前
第五部分:第二节 - Node.js 核心模块:厨房里的基本工具
node.js
chaodaibing1 小时前
Python解析Excel入库如何做到行的拆分
开发语言·python·excel