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

 找回密码
 立即注册
查看: 1414|回复: 5

[教程系列] 在不安装第三方库的情况下解决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

主题

1392

帖子

2万

积分

元老级技术达人

积分
24744
金钱
23312
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

帖子

6057

积分

论坛元老

流水无味

Rank: 8Rank: 8

积分
6057
金钱
3984
HASS币
145

灌水之王

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

使用道具 举报

5

主题

41

帖子

480

积分

中级会员

Rank: 3Rank: 3

积分
480
金钱
439
HASS币
0
发表于 2024-12-14 16:04:53 | 显示全部楼层
dscao 发表于 2023-4-20 17:16
这个高级呀,没用过child_process模块。

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

感谢,同样问题搞定!
回复

使用道具 举报

0

主题

21

帖子

64

积分

注册会员

Rank: 2

积分
64
金钱
43
HASS币
0
发表于 6 天前 | 显示全部楼层
http请求的话可以尝试把Accept-Encoding头去掉
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-22 12:06 , Processed in 0.087825 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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