使用 Node.js 模拟执行 JavaScript

devtools/2024/10/18 6:10:17/

准备工作

正确安装好 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.bodyres.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 requestsdata = {'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

结果是一样的


http://www.ppmy.cn/devtools/93973.html

相关文章

月薪5W的项目经理是如何面试的?这份面试攻略请收好!

面试是项目经理求职必须经历的一关,但很多经验不够丰富的项目经理不知道面试会问些什么问题,也不知道要怎么回答,无疑会直接影响面试企业的判断,使项目经理求职受阳.所以,项目经理想要顺利求职,还是有必要掌…

# [0813] Task01 Datawhale AI 夏令营 —— 数据合成与清洗

参考教程链接:注意查看 评论区相关内容 Q & A 汇总 赛事链接:天池 Better Synth 多模态大模型数据合成挑战赛 算力资源 挺烧钱的。。 之前的教程有些问题没考虑到,排坑花了 200 了。。 跑通 baseline 至少需要 120G 内存以上的 A10&am…

Qt读写sysfs

本文介绍Qt读写sysfs。 在嵌入式Linux系统上开发Qt应用程序,经常会涉及到外设的控制,比如GPIO,PWM的控制,Linux环境下可以像操作文件一样操作它们,这通常会涉及到sysfs的读写。本文以读写GPIO为例,简要介绍…

Linux部署MySQL8.0

目录 一、部署前准备1.1、查看系统版本和位数(32位或64位)1.2、下载对应安装包 二、开始部署1、将安装包解压并且移动到目标安装目录2、准备MySQL数据和日志等存储文件夹3、准备MySQL配置文件 my.cnf4、创建mysql单独用户组和用户,将安装目录…

Android控件详解

在Android应用程序中,界面由布局和组件组成。布局相当于框架,而控件则是框架里面的内容。了解过Android布局后,如果要设计ui界面,还需要了解和掌握各个控件的应用。 一个界面的设计,先从创建容器开始,再向…

重启redis服务时报错:Failed to start redis.service: Unit not found

重启redis服务时报错:Failed to start redis.service: Unit not found redis配合安全修改了bind和auth配置,重启的时候报错了,试了很多方法,最后才通过日志解决了 1 重新加载systemd 配置并启动: sudo systemctl da…

Mojo中低水平的IR介绍

Mojo是一种具有广泛现代功能的高级编程语言。Mojo还为程序员提供了访问所有底层原语的机会,以便编写强大而零成本的抽象。 ​ 这些原语用MLIR实现,MLIR是一种用于编译器设计的可扩展中间表示格式。许多不同的编程语言和编译器将它们的源程序翻译成MLIR,因为Mojo提供了直接访…

高性能并行计算面试-核心概念-问题理解

目录 1.什么是并行计算?高性能从哪些方面体现? 2.CPU常见的并行技术 3.GPU并行 4.并发与并行 5.常见的并行计算模型 6.如何评估并行程序的性能? 7.描述Am达尔定律和Gustafson定律,并解释它们对并行计算性能的影响 8.并行计…