如何在Node.js中实现发送XML文件并保存响应的curl命令功能
在Node.js中实现指定curl命令的功能
你提供的curl命令作用是:切换到C:/test/目录,读取C:/test/Basic/SPND.xml中的XML数据,以POST方式发送到localhost:9001,最后将服务器响应写入C:/test/Basic/Result.xml文件。下面提供两种Node.js实现方案:
方案一:使用Node.js原生http模块(无额外依赖)
无需安装第三方包,直接用内置的http和fs模块实现:
const fs = require('fs'); const http = require('http'); // 同步读取XML文件内容 const xmlContent = fs.readFileSync('C:/test/Basic/SPND.xml', 'utf8'); // 配置请求参数 const requestOptions = { hostname: 'localhost', port: 9001, path: '/', method: 'POST', headers: { 'Content-Type': 'application/xml', 'Content-Length': Buffer.byteLength(xmlContent) } }; // 发起请求 const req = http.request(requestOptions, (res) => { let responseBuffer = ''; // 分段接收响应数据 res.on('data', (chunk) => { responseBuffer += chunk; }); // 响应接收完成后写入文件 res.on('end', () => { fs.writeFileSync('C:/test/Basic/Result.xml', responseBuffer, 'utf8'); console.log('响应已写入Result.xml文件'); }); }); // 监听请求错误 req.on('error', (err) => { console.error('请求发送失败:', err); }); // 发送XML数据并结束请求 req.write(xmlContent); req.end();
方案二:使用axios(代码更简洁)
axios是常用的HTTP请求库,代码更易读,支持Promise和async/await语法,需要先安装:
npm install axios
实现代码:
const fs = require('fs'); const axios = require('axios'); async function handleXmlRequest() { try { // 读取XML文件 const xmlContent = fs.readFileSync('C:/test/Basic/SPND.xml', 'utf8'); // 发送POST请求 const response = await axios.post('http://localhost:9001', xmlContent, { headers: { 'Content-Type': 'application/xml' } }); // 将响应内容写入目标文件 fs.writeFileSync('C:/test/Basic/Result.xml', response.data, 'utf8'); console.log('响应已成功保存到Result.xml'); } catch (error) { console.error('操作出错:', error.message); } } // 执行函数 handleXmlRequest();
注意事项
- 若XML文件体积较大,建议使用流式操作(
fs.createReadStream和fs.createWriteStream),避免一次性读取大文件导致内存占用过高 - 确保
C:/test/Basic/目录存在,否则写入文件会报错,可提前用fs.mkdirSync('C:/test/Basic/', { recursive: true })创建目录
内容的提问来源于stack exchange,提问作者Abisha
相关产品推荐
相关产品推荐

