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

 找回密码
 立即注册
查看: 2632|回复: 22

[流程系列] 请教下大佬们,怎么通过webhook节点拉取并修改Cookies

[复制链接]

4

主题

114

帖子

653

积分

高级会员

Rank: 4

积分
653
金钱
539
HASS币
0
发表于 2024-4-23 08:56:56 | 显示全部楼层 |阅读模式
本帖最后由 snowing 于 2024-4-23 10:18 编辑

参考大神33201leenkon原贴【node-red】比亚迪汽车通过官方微信API接入HAhttps://bbs.hassbian.com/thread-18154-1-1.html

Cookies有效期很短,在网上找到了抓包工具,可以通过WebHook推送,nodered已经可以接收到Cookies了本人编程小白,想通过自动替换Cookies,搜索和用GPT都不行,只能求助大神,感谢

下面是我建的webhook节点,复制的代码导入有问题,缺少\,请不要复制下面的代码。我作为附件上传了。
[{"id":"91d117833116ea62","type":"ha-webhook","z":"89a87322e24a5442","name":"Cookies WebHook","server":"70a6b1f4.22b43","version":3,"exposeAsEntityConfig":"","outputs":1,"webhookId":"1XGRXxqYC6pQWCUAB1twuvp51xbzvFM9","method_get":false,"method_head":false,"method_post":true,"method_put":true,"outputProperties":[{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"payloadLocation":false,"payloadLocationType":false,"headersLocation":false,"headersLocationType":false,"x":220,"y":180,"wires":[["c9d026c8cd5fdfd6","2eeddbee11099bb8"]]},{"id":"70a6b1f4.22b43","type":"server","name":"Home Assistant","addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"","statusSeparator":"","enableGlobalContextStore":false}]
目的是,当Cookies WebHook节点接收到Cookies,格式为HWWAFSESID=1234567890123456789; HWWAFSESTIME=1234567890123; 0ab08166-1234-1234-1234-02ee6710ea63=3807a8bb1a62c923c4da621150f11234; openid=1234579dd08b484ca5993703905706641713832412345的数据时,用openid=1234579dd08b484ca5993703905706641713832412345自动替换下面API参数节点中openid=对应部分,其他部分不做修改。
[{"id":"be4a66ad5a4fd7f8","type":"function","z":"051f5ad5ce40adac","name":"API参数","func":"const userInfo = {\n    "cookies": "openid=1234579dd08b484ca5993703905706641713832412345;0ab08166-1234-1234-1234-02ee6710ea63=3807a8bb1a62c923c4da621150f11234"\n}\nif (typeof (msg.payload) === "object" && msg.payload.listInfo[0].vin) {\n    global.set("bydUserInfo", Object.assign(userInfo, msg.payload.listInfo[0]));\n}\nmsg.headers = {"cookie":userInfo.cookies}\nif (!global.get("bydUserInfo")) {    \n    msg.url = `https://bydcloud.byd.com/wechat/getuserinfo?timeStamp=${Math.floor(Date.now())}&random=${global.uuid}`\n    return [msg, null];\n} else {\n    msg.url = `https://bydcloud.byd.com/wechat/location?caridentifier=${global.get("bydUserInfo").vin}&timeStamp=${Math.floor(Date.now())}&random=${global.uuid}&longitude=0&latitude=0`\n    return [null, msg];\n}","outputs":2,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":80,"wires":[["e48fb87f4ea2cfe9"],["3e1d677280357738"]]}]

节点.rar

1.22 KB, 下载次数: 10

回复

使用道具 举报

56

主题

929

帖子

4075

积分

论坛元老

Rank: 8Rank: 8

积分
4075
金钱
3146
HASS币
0
发表于 2024-4-23 10:26:59 | 显示全部楼层
提供一个思路:
1、将提取到的webhook中的openid 参数存入流程上下文数据,你可以设置任意触发条件自动提取暂存数据。
var openid = msg.cookies;//提取webhook中的openid字符串
flow.set("openid",openid)
2、你要使用这个参数时,需要调用时,你拼接字符串调用这个暂存数据就是了。
var openid = flow.get("openid");//提取暂存数据


3、这样调用字串时的openid就是最新的,你每天定时更新一下webhook提取就是了。

回复

使用道具 举报

4

主题

114

帖子

653

积分

高级会员

Rank: 4

积分
653
金钱
539
HASS币
0
 楼主| 发表于 2024-4-23 11:13:35 | 显示全部楼层
本帖最后由 snowing 于 2024-4-23 11:22 编辑
bainiu 发表于 2024-4-23 10:26
提供一个思路:
1、将提取到的webhook中的openid 参数存入流程上下文数据,你可以设置任意触发条件自动提取 ...

这样改可以吗,试了下好像不行。。。

                               
登录/注册后可看大图

var openid = msg.cookies;//提取webhook中的openid字符串
flow.set("openid",openid)
var openid = flow.get("openid");//提取暂存数据
const userInfo = {
    "cookies": `openid=${openid};12348166-73d7-42ac-a569-02ee6710ea63=3807a8bb1a62c923c4da621150f11234`
}
if (typeof (msg.payload) === "object" && msg.payload.listInfo[0].vin) {
    global.set("bydUserInfo", Object.assign(userInfo, msg.payload.listInfo[0]));
}
msg.headers = {"cookie":userInfo.cookies}
if (!global.get("bydUserInfo")) {    
    msg.url = `https://bydcloud.byd.com/wechat/getuserinfo?timeStamp=${Math.floor(Date.now())}&random=${global.uuid}`
    return [msg, null];
} else {
    msg.url = `https://bydcloud.byd.com/wechat/location?caridentifier=${global.get("bydUserInfo").vin}&timeStamp=${Math.floor(Date.now())}&random=${global.uuid}&longitude=0&latitude=0`
    return [null, msg];
}
1.png
回复

使用道具 举报

56

主题

929

帖子

4075

积分

论坛元老

Rank: 8Rank: 8

积分
4075
金钱
3146
HASS币
0
发表于 2024-4-23 11:29:07 | 显示全部楼层
var openid = msg.cookies; 这段代码是示例,你要自己修改,要确保从cookies字符串中截取“openid=“后面的数字部分。还有,一个存数据,一个取数据,不在一个流里面。两个流。
回复

使用道具 举报

4

主题

114

帖子

653

积分

高级会员

Rank: 4

积分
653
金钱
539
HASS币
0
 楼主| 发表于 2024-4-23 11:33:26 | 显示全部楼层
本帖最后由 snowing 于 2024-4-23 11:34 编辑

我试一下
回复

使用道具 举报

0

主题

37

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
金钱
280
HASS币
0
发表于 2024-5-7 11:52:22 | 显示全部楼层
楼主搞定没有,我也在用BYD助手,但是用原来的流,更换获得的COOKIES,只能获得GPS信息,汽车信息还是会出错。
回复

使用道具 举报

0

主题

37

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
金钱
280
HASS币
0
发表于 2024-5-7 11:57:03 | 显示全部楼层
2024/5/7 11:56:20节点: 生成sensor
function : (error)
"TypeError: Cannot read properties of undefined (reading 'hbx')"
这是我的在中的出错信息
回复

使用道具 举报

4

主题

114

帖子

653

积分

高级会员

Rank: 4

积分
653
金钱
539
HASS币
0
 楼主| 发表于 2024-5-7 12:31:05 | 显示全部楼层
bebetter 发表于 2024-5-7 11:57
2024/5/7 11:56:20节点: 生成sensor
function : (error)
"TypeError: Cannot read properties of undefined ...

帖子后面有回复加的uuid
回复

使用道具 举报

4

主题

114

帖子

653

积分

高级会员

Rank: 4

积分
653
金钱
539
HASS币
0
 楼主| 发表于 2024-5-7 12:32:12 | 显示全部楼层
bebetter 发表于 2024-5-7 11:52
楼主搞定没有,我也在用BYD助手,但是用原来的流,更换获得的COOKIES,只能获得GPS信息,汽车信息还是会出 ...

用ChatGPT搞定的
回复

使用道具 举报

0

主题

37

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
金钱
280
HASS币
0
发表于 2024-5-7 14:02:39 | 显示全部楼层
我已经使用了帖子中另外一名大佬加一个随机数UUID的流,能获得GPS信息,但车子信息还是出错。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-21 20:11 , Processed in 1.958474 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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