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

 找回密码
 立即注册
查看: 300|回复: 6

[教程系列] 请教关于对象型请求参数如何在NR中传递

[复制链接]

34

主题

138

帖子

1121

积分

金牌会员

Rank: 6Rank: 6

积分
1121
金钱
983
HASS币
0
发表于 2024-9-19 15:11:50 | 显示全部楼层 |阅读模式
以下为黄鸟抓包水务公众号的请求原始头文件。其中请求体中的“requestPara”中的参数,如何传达到POST请求。请大佬指教。

POST /iwater/v1/watermeter/queryPayMentInfo/v2.json HTTP/1.1
Host: wt.ptswater.cn
Connection: keep-alive
Content-Length: 291
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090c0f) XWEB/11253 Flue
Content-Type: application/x-www-form-urlencoded
Origin: https://wt.ptswater.cn
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://wt.ptswater.cn/h5/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

requestPara={"meterNumber":"100048853","startDate":"20240101","endDate":"20241231","payStatus":"2","token":"JbwSSaXtbJBlD0CFOCRoaFNa-7j-KRDl7uIv2H8dTSWR2ERk8B8X3y_f2KAn1_ubq8SZGwSoJ_SbbbNQMcsqaA","waterCorpId":3,"UNID":"","areaId":0,"accountType":"XJ","apiType":"JSAPI","appVersion":"1.0.2"}

以下我用FUCTION编写的请求头函数:
msg.headers = {
'Connection': 'keep-alive',
'Content-Length': '291',
'Accept': 'application/json, text/plain, */*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090c0f) XWEB/11253 Flue',
'Content-Type': 'application/x-www-form-urlencoded',
'Origin: https':'//wt.ptswater.cn',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer: https':'//wt.ptswater.cn/h5/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
msg.payload= {
    requestPara:{
    "meterNumber":"100048853",
    "startDate":"20240101",
    "endDate":"20241231",
    "payStatus":"2",
    "token":"JbwSSaXtbJBlD0CFOCRoaFNa-7j-KRDl7uIv2H8dTSWR2ERk8B8X3y_f2KAn1_ubq8SZGwSoJ_SbbbNQMcsqaA",
    "waterCorpId":3,
    "UNID":"",
    "areaId":0,
    "accountType":"XJ",
    "apiType":"JSAPI",
    "appVersion":"1.0.2"
    }   
}
return msg;

请求时会出现


RequestError: Header name must be a valid HTTP token ["Origin: https"] : https://wt.ptswater.cn/iwater/v1 ... PayMentInfo/v2.json



回复

使用道具 举报

18

主题

587

帖子

4283

积分

元老级技术达人

积分
4283
金钱
3661
HASS币
182
发表于 2024-9-19 16:33:29 | 显示全部楼层
'Origin: https':'//wt.ptswater.cn',


看错误提示,这个地方写错了
回复

使用道具 举报

16

主题

178

帖子

926

积分

高级会员

Rank: 4

积分
926
金钱
748
HASS币
0
发表于 2024-9-19 16:48:37 | 显示全部楼层
楼上说对了,可以用postman跑通了,再用nodered
回复

使用道具 举报

34

主题

138

帖子

1121

积分

金牌会员

Rank: 6Rank: 6

积分
1121
金钱
983
HASS币
0
 楼主| 发表于 2024-9-19 16:49:55 | 显示全部楼层
louis_lee 发表于 2024-9-19 16:33
看错误提示,这个地方写错了

这个地方改好了,现在就是请求无响应。
回复

使用道具 举报

18

主题

587

帖子

4283

积分

元老级技术达人

积分
4283
金钱
3661
HASS币
182
发表于 2024-9-19 17:01:20 | 显示全部楼层
本帖最后由 louis_lee 于 2024-9-19 17:48 编辑
lambilly 发表于 2024-9-19 16:49
这个地方改好了,现在就是请求无响应。

有空试了试,json需要转义成字符串才能传给表单数据,我这可以获取数据

msg.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}

msg.payload={
    "requestPara":"{\"meterNumber\":\"100048853\", \"startDate\":\"20240101\", \"endDate\":\"20241231\",\"payStatus\":\"2\",\"token\":\"JbwSSaXtbJBlD0CFOCRoaFNa-7j-KRDl7uIv2H8dTSWR2ERk8B8X3y_f2KAn1_ubq8SZGwSoJ_SbbbNQMcsqaA\",\"waterCorpId\":3,\"areaId\":0,\"accountType\":\"XJ\",\"apiType\":\"JSAPI\",\"appVersion\":\"1.0.2\"}"
}

return msg;



回复

使用道具 举报

34

主题

138

帖子

1121

积分

金牌会员

Rank: 6Rank: 6

积分
1121
金钱
983
HASS币
0
 楼主| 发表于 2024-9-19 19:49:00 | 显示全部楼层
louis_lee 发表于 2024-9-19 17:01
有空试了试,json需要转义成字符串才能传给表单数据,我这可以获取数据

msg.headers = {

感谢大佬,确实可以。还有一个请教一下。为什么头中加上这句'Content-Length': '291',,就会显示
message: "参数类型错误"
status: -1
回复

使用道具 举报

18

主题

587

帖子

4283

积分

元老级技术达人

积分
4283
金钱
3661
HASS币
182
发表于 2024-9-19 21:48:46 | 显示全部楼层
lambilly 发表于 2024-9-19 19:49
感谢大佬,确实可以。还有一个请教一下。为什么头中加上这句'Content-Length': '291',,就会显示
message ...

Content-Length都是自己计算的,你写死后就会override自动计算的结果。这种情况下,如果override的结果小于实际的值,就会造成数据读不全。

具体到他这个案例,应该是服务端收到数据后,由于上述原因,无法将反序列化成对象,抛出error包装后返回到前端。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 17:31 , Processed in 0.049842 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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