You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-parser
    
    const bodyParser = require('body-parser');
    app.use(bodyParser.json());
    

3. 检查请求体合法性

确认请求体是标准JSON格式:

  • 所有字符串用双引号包裹(不要用单引号)
  • 数组和对象的括号配对正确
  • 特殊字符(如乌克兰语)编码为UTF-8,服务器端需确保支持UTF-8解析

内容的提问来源于stack exchange,提问作者Sergii Rubicon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:25:13