如何在Mininet中从JavaScript文件执行curl命令?附示例
没问题!在Mininet环境里从JavaScript文件执行你要的这个curl POST请求,有两种实用的方式——要么直接调用系统的curl命令,要么用Node.js原生的HTTP模块来发请求(后者更贴合JS环境,不用依赖外部工具)。下面我给你详细拆解每一种方式:
方法1:调用系统curl命令(用Node.js的child_process模块)
这种方式就相当于在JS里直接触发终端的curl命令,非常直观。你需要用到Node.js的child_process模块,它可以帮你执行系统shell命令。
首先创建一个JS文件(比如send_qos_rule.js),代码如下:
const { exec } = require('child_process'); // 你要执行的curl命令 const curlCommand = `curl -X POST -d '{"match": {"nw_dst": "10.0.0.1", "nw_proto": "UDP", "tp_dst": "5002"}, "actions":{"queue": "1"}}' http://localhost:8080/qos/rules/0000000000000001`; // 执行命令并处理结果 exec(curlCommand, (error, stdout, stderr) => { if (error) { console.error(`执行出错: ${error.message}`); return; } if (stderr) { console.error(`错误输出: ${stderr}`); return; } console.log(`命令执行结果: ${stdout}`); });
然后在Mininet环境里运行这个脚本:
- 确保你已经安装了Node.js(在终端输入
node -v检查,没装的话用sudo apt install nodejs安装) - 如果是在Mininet的虚拟主机里运行,先进入主机:
mininet> h1 xterm(这里h1是你拓扑里的主机) - 在xterm里执行:
node send_qos_rule.js
方法2:用Node.js原生HTTP模块发送请求(无需curl)
这种方式不需要依赖系统的curl工具,直接用Node自带的http模块构造POST请求,更适合JavaScript项目,也更灵活。
同样创建send_qos_rule.js,代码如下:
const http = require('http'); // 请求配置 const options = { hostname: 'localhost', port: 8080, path: '/qos/rules/0000000000000001', method: 'POST', headers: { 'Content-Type': 'application/json', }, }; // 构造请求体 const postData = JSON.stringify({ match: { nw_dst: "10.0.0.1", nw_proto: "UDP", tp_dst: "5002" }, actions: { queue: "1" } }); // 发送请求 const req = http.request(options, (res) => { console.log(`状态码: ${res.statusCode}`); console.log(`响应头: ${JSON.stringify(res.headers)}`); res.on('data', (chunk) => { console.log(`响应体: ${chunk}`); }); res.on('end', () => { console.log('请求完成'); }); }); req.on('error', (e) => { console.error(`请求出错: ${e.message}`); }); // 写入请求体并结束请求 req.write(postData); req.end();
运行方式和方法1一致,用node send_qos_rule.js执行即可。
一些关键注意事项
- 确保你的SDN控制器(比如ONOS,因为这个API路径看起来是ONOS的QoS规则接口)已经启动,并且端口8080对外可访问
- 如果控制器不在Mininet本地,要把代码里的
localhost改成控制器的实际IP地址 - 检查交换机ID
0000000000000001是否和你Mininet拓扑里的交换机ID一致,不一致的话要对应修改
内容的提问来源于stack exchange,提问作者Torrado36
相关产品推荐
相关产品推荐

