【发布时间】:2021-08-20 16:55:27
【问题描述】:
我在解析使用“%26”而不是“&”字符的 HTTP 请求时遇到困难。
上下文:我正在尝试接收由 IP 摄像机发出的 HTTP 请求,该请求具有无法发送“&”字符的限制,因此我必须使用“%26”来设置它来分隔参数,所以相机正在发出这样的 POST 请求:
http://192.168.45.4:8000/test?foo=me%26bar=them
为了在我的服务器端处理这个请求,我有这个简单的功能:
Broker.all("*", (req,res) => {
console.log("foo=" + req.query.foo);
console.log("bar=" + req.query.bar);
console.log("Received a generic put request");
res.send("Processed");
});
当我使用“&”字符发出请求时,此代码运行良好。
这是请求的结果:http://192.168.45.4:8000/test?foo=me&bar=them
foo=me
bar=them
Received a generic put request
这是请求的结果:http://192.168.45.4:8000/test?foo=me%26bar=them
foo=me&bar=them
bar=undefined
Received a generic put request
过去我一直在敲我的头......(羞愧)......不管多少小时,我不确定我做错了什么。 我很确定这很容易,但我真的在论坛上找不到它,可能是因为我无法在帖子中专门搜索“%26”。 任何帮助将不胜感激。
解决后编辑
按照 GPack 的建议,我使用了他的解析器代码,它似乎可以正常工作。只需要确保事先检查通用 URL 是否有参数。 我仍然相信使用 express 可能有一种更自然的方式来做到这一点......
这是带有正在工作的解析器的新代码:
broker.all("*", (req,res) => {
const list = req.originalUrl.split("?")[1].split("%26");
const params = list.reduce((obj, str) => {
const parts = str.split("=");
obj[parts[0]] = parts[1];
return obj;
}, {});
console.log(params); // { bar: "them", foo: "me" }
console.log("foo=" + params.foo);
console.log("bar=" + params.bar);
console.log("Received a generic put request");
res.send("I'm just a simple broker");
});
【问题讨论】:
标签: node.js express parsing escaping node-modules