【问题标题】:Node-red set get http request parametersnode-red set 获取http请求参数
【发布时间】:2020-02-25 17:06:57
【问题描述】:

使用 Node-Red,我正在尝试为 http 请求设置正确的参数,但我无法做到。

使用 curl 的查询是这样的:

curl -H "Content-Type: application/json" -X GET -d '{"auth_key":"xf79rra", "payload":null}' https://retepaiot.it/sensordata/0018b1213

它有效。

我认为我在传递 auth_key 和 payload 时做错了(它们不是 URL 参数)。 我使用函数来准备消息:

msg.headers = {    
    "Content-Type": "application/json"
    };


msg.payload = {auth_key:"xf7xxxx9rra", 
    payload:null};
return msg;

和对 URL 的 http 请求:

https://retepaiot.it/sensordata/001xxxx1213

返回的消息是:

{ "message": "Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)"}

【问题讨论】:

  • 运行curl 命令时得到的响应是什么,它是JSON 字符串吗?错误是关于处理回复,而不是您发送的内容。
  • 返回是 statusCode: 400 (Bad request)
  • 表示错误是准确的,因为“statusCode: 400 (Bad request”不是JSON
  • 是的,没错。问题是如何在 node-red 上填写请求。

标签: node-red


【解决方案1】:

查看节点配置底部的“返回类型”,您已明确要求提供 JSON 对象

【讨论】:

  • 请求的回复是json。无论如何,使用其他选项结果不会改变。
  • 这不是您在问题的 cmets 中所说的。我明确询问了有效的curl 命令的返回值是什么。
  • 对不起,我误解了你的问题。 Curl 返回请求的数据。这是一个例子: { "data": [ { "id": 310310, "time": "2020-02-23T12:27:07", "device_eui": "0018b22000001213", "rssi": -115, "站”:“00800000a00047da”,“数据”:“428001107fe200000000”,“频率”:“868500000”,“模数”:“868500000”,“纬度”:44.812036,“经度”:10.313763}],“消息”:“好的”}
  • 编辑问题以包含该输出。我还建议您使用hookbin.com 之类的东西来比较curlnode-red 实际发送的内容
  • 我的看法是,使用node-red Http请求,如果使用GET命令,则不添加payload。已移除。 Get 不期望正文中的数据。这里有一些相关的考虑。stackoverflow.com/questions/978061/http-get-with-request-bodyCurl 不这样做。 -d 标志强制正文中的数据。问题是被调用的服务器不在我的域中,我无法更改它,并且它需要正文进行授权。结论:我不知道如何解决我的问题。
【解决方案2】:

从 http 请求调用的方法 GET 不管理有效负载(http 上的正文)。只是它忽略了它。 这符合协议,因此不是错误(请参阅 cmets)。

我正在调用的 REST 服务器似乎不符合 GET 方法。

目前,我已经修改了节点www request的源代码。接下来,我将开发自己的节点。

修改http请求代码可能会很有用,甚至可以支持不完全兼容的服务器。

【讨论】:

  • 不!不要建立自己的节点,按照我的要求打开问题,我们可以修复核心节点。在可用节点列表中添加另一个节点是错误的做法。
  • 好的,我会打开一个错误,即使我认为它不是真正的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
相关资源
最近更新 更多