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

 找回密码
 立即注册
查看: 2172|回复: 10

[技术探讨] node-red http request是否支持跨域访问?

[复制链接]

7

主题

107

帖子

942

积分

高级会员

Rank: 4

积分
942
金钱
835
HASS币
0
发表于 2023-3-20 20:10:52 | 显示全部楼层 |阅读模式
本帖最后由 kffnqtd 于 2023-3-20 20:14 编辑

家里的燃气也是物联表,交费查询都可以在微信小程序下查询。但是这个燃气欠费停气却没有任何通知,网页上也能查到月扣费记录,没有而且表端的费用。
所以我抓包了小程序的,但是却遇到了下面这样的问题。
截屏2023-03-20 19.42.23.png
第一个请求头的URL是https://wx.hzgas.com/gasWechat/gasAccountController.do?getCustBalance&account=***&openId=o7autt-***
页面是这样的显示的
IMG_5659.jpeg
第二个请求头的URL是https://wx.hzgas.com/gasWechat/gasRechargeController.do?wechatAccountBill&account=***
页面是这样的显示的

IMG_5660.jpeg
我需要的是这个表端余额,如果低于十块可以通过HA给我发通知,这样就不能每次都是停气了才去充值,而且充值后还要到表端操作才能复开燃气
上面这两个URL看域名是一样的,是不是第二个会到微信域名去查询,所以导致跨域错误?我也是个node red小白,没有配置过,都是抄大佬的作业。有没有大佬支招解惑一下?
回复

使用道具 举报

0

主题

109

帖子

1323

积分

金牌会员

Rank: 6Rank: 6

积分
1323
金钱
1214
HASS币
0
发表于 2023-3-20 20:16:37 | 显示全部楼层
http request没有跨域限制
回复

使用道具 举报

7

主题

107

帖子

942

积分

高级会员

Rank: 4

积分
942
金钱
835
HASS币
0
 楼主| 发表于 2023-3-20 20:20:08 | 显示全部楼层
silversucks 发表于 2023-3-20 20:16
http request没有跨域限制

那我这第二个请求错误是什么错误,是证书不对吗?有没有办法解决?
回复

使用道具 举报

7

主题

166

帖子

1302

积分

论坛技术达人

积分
1302
金钱
1131
HASS币
60
发表于 2023-3-20 22:07:20 | 显示全部楼层
在“请求头”的function里面加上下面的试试?
msg.rejectUnauthorized = false
回复

使用道具 举报

7

主题

107

帖子

942

积分

高级会员

Rank: 4

积分
942
金钱
835
HASS币
0
 楼主| 发表于 2023-3-20 23:29:21 | 显示全部楼层
arthurfsy 发表于 2023-3-20 22:07
在“请求头”的function里面加上下面的试试?

试了一下,返回404
我试着第二个链接加上第一个链接后面的openid,在chrome里自定义UA去打开,可以打开页面。 截屏2023-03-20 23.14.33.png
但是在node red里面一样的配置,却只打开了head字段,body没有出来,不知道问题出在哪里……
截屏2023-03-20 23.14.01.png
回复

使用道具 举报

20

主题

484

帖子

3164

积分

论坛元老

Rank: 8Rank: 8

积分
3164
金钱
2680
HASS币
8
发表于 2023-3-21 05:53:57 来自手机 | 显示全部楼层
在debug栏里查看返回的信息,head显示出来body部分未显示不能说明真实情况。你可以在后面放一个function节点来读取http节点的payload数据,一是用length方法返回总长度来判断实际的字符长度,应该比debug里显示出来的多,二是用indexof方法查找“表端余额”判断所需的数据有没有出来
回复

使用道具 举报

7

主题

107

帖子

942

积分

高级会员

Rank: 4

积分
942
金钱
835
HASS币
0
 楼主| 发表于 2023-3-21 11:08:19 | 显示全部楼层
cjnt007 发表于 2023-3-21 05:53
在debug栏里查看返回的信息,head显示出来body部分未显示不能说明真实情况。你可以在后面放一个function节 ...

length的方法我也不会写,搜索出来的一段放上去出来就是下面图片这样的,2426?是字节吗?
截屏2023-03-21 11.01.15.png
var new_msg = { payload: msg.payload.length }
msg.payload = new_msg
return msg;
代码是上面的,这样写对吗?
indexOf的代码像下面这样写对吗?
if (msg.payload.indexOf("表端余额") > -1) {
    var topic="YES";
    msg.topic=topic;
}
return msg;
输出的topic""空值,是不是就表示没有?
回复

使用道具 举报

7

主题

107

帖子

942

积分

高级会员

Rank: 4

积分
942
金钱
835
HASS币
0
 楼主| 发表于 2023-3-21 11:42:04 | 显示全部楼层
cjnt007 发表于 2023-3-21 05:53
在debug栏里查看返回的信息,head显示出来body部分未显示不能说明真实情况。你可以在后面放一个function节 ...

从Chrome上看,应该是只请求到了一个文件,其他的没有返回,这个http request跟网页访问机制不一样的吗?
截屏2023-03-21 11.38.35.png
回复

使用道具 举报

7

主题

107

帖子

942

积分

高级会员

Rank: 4

积分
942
金钱
835
HASS币
0
 楼主| 发表于 2023-3-21 12:36:28 | 显示全部楼层
cjnt007 发表于 2023-3-21 05:53
在debug栏里查看返回的信息,head显示出来body部分未显示不能说明真实情况。你可以在后面放一个function节 ...

真的是显示不全而已我把Debug输出到控制台,在node red里的日志就看到了剩下的内容了,现在就是怎么把想要的内容提取出来了
回复

使用道具 举报

20

主题

484

帖子

3164

积分

论坛元老

Rank: 8Rank: 8

积分
3164
金钱
2680
HASS币
8
发表于 2023-3-21 13:17:06 | 显示全部楼层
kffnqtd 发表于 2023-3-21 12:36
真的是显示不全而已我把Debug输出到控制台,在node red里的日志就看到了剩下的内容了,现在就是怎 ...

在chrome里打开页面,然后查看网页源代码,查找表端余额所在节点信息,根据html代码特征设定一个唯一字符串,用indexof方法确定初始位置,再用substring方法截取所需数据。
给个查找token的示例供参考:
const html = msg.payload;
const start = html.indexOf('token:');
const end = html.indexOf('\n', start);
const token = html.substring(start + 6, end-1);
msg.access_token = token;
msg.payload = null;
return msg;
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-28 00:47 , Processed in 0.079264 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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