Node.js 节点JS发送空JSON正文

Node.js 节点JS发送空JSON正文,node.js,post,Node.js,Post,下面的代码应该发送POST请求,但JSON正文为空: request.post({ url: url, headers: { "data_digest": 'muZ7EcapQZVb77RF', "partner_code": "ebfebc241db9b9c1a", "msg_type": "GET_BASEDATA_TRANSPORT", "msg_id": '1590464383047', "A

下面的代码应该发送POST请求,但JSON正文为空:

request.post({
    url: url,
    headers: {
        "data_digest": 'muZ7EcapQZVb77RF',
        "partner_code": "ebfebc241db9b9c1a",
        "msg_type": "GET_BASEDATA_TRANSPORT",
        "msg_id": '1590464383047',
        "Accept-Language": "zh-cn"
    },
    json: true,
    body: {}
}, function(error, response, body) {
    console.log(body);
});
然而,这种情况不断出现

'System Exception:\r\ntype org.springframework.web.HttpMediaTypeNotAcceptableException\r\nmessage:Could not find acceptable representation'
但是使用Postman,我能够正确地发送具有完全相同的头的POST请求,但是在Body参数中只有一个空的{}和原始格式


如何在节点JS中发送带有空JSON正文的POST请求?

您发送正文的方式很好。如果您查看实际发送的请求(例如使用Fiddler或Wireshark),您将看到正文已正确发送。问题在于其他方面——相反,您会看到标题不完全相同

使用
json
(使用
json:true
body
,或者使用
json
作为对象)也会自动将
Accept
头设置为
application/json
,并尝试将响应解析为json

这个服务器
chiguotest.ytoglobal.com
似乎有一个bug,它返回JSON,但没有正确处理
Accept
头(我对它进行了测试,服务器似乎“认为”它正在返回
text/plain
)。因此,
request
正确地告诉服务器“我希望您返回JSON”,但服务器说“什么,JSON?不,我不知道如何返回JSON,只返回文本,对不起。”。然而,它实际上返回了JSON

您可以通过明确发送
Accept://*
头来绕过此服务器错误:

request.post({
url:url,
标题:{
“数据摘要”:“muZ7EcapQZV”,
“合作伙伴代码”:“ebfebc241db9b9c”,
“消息类型”:“获取基本数据传输”,
“msg_id”:“1590464383047”,
“接受语言”:“zh cn”,
“接受”:“*/*”
},
是的,
正文:{}
},函数(错误、响应、正文){
控制台日志(主体);
});
我的输出:

{
  "data": {
    "productKinds": [
      {
        "productCnname": "(美国)测试用-不拉G单号",
        "productCode": "1",
        "productEnname": "1",
        "productServerhawbcodeNeed": "Y"
      },
      {
        "productCnname": "散客可见产品",
        "productCode": "111",
        "productEnname": "内部产品",
        "productServerhawbcodeNeed": "N"
      },
      ... many more entries ...
   ]
  },
  "errorCode": "SUCCESS",
  "errorMsg": "成功",
  "status": true
}

我最初的评估是错误的,因为我把
请求
的API与我经常使用的
请求承诺
混淆了。json:{}工作正常。这个问题是另外一个问题,请参见下面我的新答案-您需要
Accept://*
。我删除了我的旧答案。非常感谢!在过去的24小时里,我到处找,没有找到解决办法