CURL POST请求至服务器后请求体解析失败问题求助
请求体解析失败问题排查与解决
问题说明
通过服务端发送CURL POST请求至自有服务器,但请求体无法被正确解析,服务器返回异常嵌套的结构。
请求示例
原CURL命令:
curl -d '{"merchantAccount":"pipedrive_youscore_rubicon_ltd","orderReference":"WFP-BTN-7181819-635e48482b33d","merchantSignature":"7bf****************c","amount":3,"currency":"UAH","authCode":"326470","email":"rubicon.sergii@gmail.com","phone":"380669114250","createdDate":1667123272,"processingDate":1667123284,"cardPan":"44****6705","cardType":"Visa","issuerBankCountry":"Ukraine","issuerBankName":"MONObank","recToken":"","transactionStatus":"Approved","reason":"Ok","reasonCode":1100,"fee":0.07,"paymentSystem":"googlePay","acquirerBankName":"WayForPay","cardProduct":"credit","clientName":"Rubicon Sergii","products":[{"name":"Тестовий товар","price":3,"count":1}],"clientFields":[{"name":"Домен порталу","value":"rawgsag"}]}' http://app.rubicon.tips:3000/checkSupPay
服务器异常返回
'{"merchantAccount":"pipedrive_youscore_rubicon_ltd","orderReference":"WFP-BTN-7181819-6361151577ee8","merchantSignature":"5f0f*************bc6536a98dd","amount":3,"currency":"UAH","authCode":"126496","email":null,"phone":null,"createdDate":1667306773,"processingDate":1667307818,"cardPan":"","cardType":null,"issuerBankCountry":null,"issuerBankName":null,"recToken":"","transactionStatus":"Refunded","reason":"Ok","reasonCode":1100,"fee":0,"paymentSystem":"googlePay","acquirerBankName":"WayForPay","cardProduct":"credit","clientName":null,"products":': { '{"name":"\u0422\u0435\u0441\u0442\u043e\u0432\u0438\u0439 \u0442\u043e\u0432\u0430\u0440","price":3,"count":1}': { '{"name":"\u0414\u043e\u043c\u0435\u043d \u043f\u043e\u0440\u0442\u0430\u043b\u0443","value":"qh34hh44h"}': '' } } }
已尝试方案
使用bodyParser.urlencoded({ extended: true })和bodyParser.json()中间件解析请求体,均无效。
解决步骤
1. 修正CURL请求的Content-Type头
CURL的-d参数默认会设置Content-Type: application/x-www-form-urlencoded,但请求体是JSON格式,服务器的bodyParser.json()只会解析Content-Type为application/json的请求,必须显式添加请求头:
curl -H "Content-Type: application/json" -d '{"merchantAccount":"pipedrive_youscore_rubicon_ltd","orderReference":"WFP-BTN-7181819-635e48482b33d","merchantSignature":"7bf****************c","amount":3,"currency":"UAH","authCode":"326470","email":"rubicon.sergii@gmail.com","phone":"380669114250","createdDate":1667123272,"processingDate":1667123284,"cardPan":"44****6705","cardType":"Visa","issuerBankCountry":"Ukraine","issuerBankName":"MONObank","recToken":"","transactionStatus":"Approved","reason":"Ok","reasonCode":1100,"fee":0.07,"paymentSystem":"googlePay","acquirerBankName":"WayForPay","cardProduct":"credit","clientName":"Rubicon Sergii","products":[{"name":"Тестовий товар","price":3,"count":1}],"clientFields":[{"name":"Домен порталу","value":"rawgsag"}]}' http://app.rubicon.tips:3000/checkSupPay
2. 验证服务器端中间件配置
- 确保
bodyParser.json()(或Express 4.16+内置的express.json())在路由之前注册,示例代码:const express = require('express'); const app = express(); // 优先注册JSON解析中间件 app.use(express.json()); // 替代bodyParser.json(),Express 4.16+内置 app.post('/checkSupPay', (req, res) => { console.log('解析后的请求体:', req.body); res.send({ status: 'success', data: req.body }); }); app.listen(3000, () => console.log('服务器运行在3000端口')); - 若仍使用
bodyParser包,需确保已安装并正确引入:npm install body-parserconst bodyParser = require('body-parser'); app.use(bodyParser.json());
3. 检查请求体合法性
确认请求体是标准JSON格式:
- 所有字符串用双引号包裹(不要用单引号)
- 数组和对象的括号配对正确
- 特殊字符(如乌克兰语)编码为UTF-8,服务器端需确保支持UTF-8解析
内容的提问来源于stack exchange,提问作者Sergii Rubicon
相关产品推荐
相关产品推荐

