『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 1295|回复: 3

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

[复制链接]

7

主题

44

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
金钱
255
HASS币
10
发表于 2023-4-20 16:52:28 | 显示全部楼层 |阅读模式
NodeRed自带有HTTP请求节点,但是这个节点只是有基础的功能,遇到一些不常规的数据,可能处理就比较麻烦。

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

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


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

3.png


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

0.png

然后在函数里调用即可:

2.png


参考代码:

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




评分

参与人数 2金钱 +16 收起 理由
xieahui + 12 感谢,满血复活!
zelotoj + 4 高手,这是高手!

查看全部评分

回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24293
金钱
22862
HASS币
290
发表于 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
回复

使用道具 举报

7

主题

44

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
金钱
255
HASS币
10
 楼主| 发表于 2023-4-20 17:18:13 | 显示全部楼层
dscao 发表于 2023-4-20 17:16
这个高级呀,没用过child_process模块。

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

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

其实就是调用curl命令而已
回复

使用道具 举报

8

主题

2073

帖子

6053

积分

论坛元老

流水无味

Rank: 8Rank: 8

积分
6053
金钱
3980
HASS币
145

灌水之王

发表于 2023-4-26 19:14:14 | 显示全部楼层
天气相关的自动化满血复活,感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-22 04:58 , Processed in 0.822278 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表