study321 发表于 2023-4-20 16:52:28

在不安装第三方库的情况下解决http请求gzip、乱码等问题

NodeRed自带有HTTP请求节点,但是这个节点只是有基础的功能,遇到一些不常规的数据,可能处理就比较麻烦。

比如我下边这个例子,获取和风天气接口,数据返回是gzip压缩过的,正常情况下我们需要解压才能获取明文。
但是NodeRed没有ungzip节点,所以除非你装第三方库(如axios请求库)

但是呢,我是不喜欢装第三方库的,主要原因是分享模块、或者重新配置还要安装第三方模块
所以能原始功能之上解决最好了。


于是我想到了一个折中的办法,直接把HTTP请求使用curl来发起,结果很符合预期。




方法很简单,新建一个函数节点,在Setup中添加模块:child_process



然后在函数里调用即可:




参考代码:

var buff = childProcess.execSync(`
curl -L -X GET --compressed '${msg.url}'
`);
var data = buff.toString();
msg.payload = JSON.parse(data);
return msg;



dscao 发表于 2023-4-20 17:16:08

这个高级呀,没用过child_process模块。

gzip 节点就可以解压http请求的结果

gzip

If the input is a compressed buffer it tries to decompress to a utf8 string.

node-red-contrib-gzip : gzip

study321 发表于 2023-4-20 17:18:13

dscao 发表于 2023-4-20 17:16
这个高级呀,没用过child_process模块。

gzip 节点就可以解压http请求的结果


介绍里说有,但实际只有压缩的函数(我也可能漏看了代码)
我是不太喜欢第三方库的,不能直接使用备份迁移还麻烦,所有用自带的功能实现了。

其实就是调用curl命令而已

xieahui 发表于 2023-4-26 19:14:14

天气相关的自动化满血复活,感谢
页: [1]
查看完整版本: 在不安装第三方库的情况下解决http请求gzip、乱码等问题