Node.js 节点JS发送空JSON正文
下面的代码应该发送POST请求,但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
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小时里,我到处找,没有找到解决办法