我正在调用一个 API,它在标头中返回 5 个键,包括标头中的Transfer-encoding :chunked 和Content-Length值。
根据stackoverflow问题,以及下面的这个,这是非法的:
“...Node.js 服务器在使用端点时返回带有代码 HPE_UNEXPECTED_CONTENT_LENGTH 的解析错误,因为响应标头包含 Transfer-encoding:chunked 和 Content-Length 值。这被认为存在 RFC 7230 第 3.3 节中指定的错误.3.3:如果接收到的消息同时带有 Transfer-Encoding 和 Content-Length 头字段,则 Transfer-Encoding 覆盖 Content-Length。这样的消息可能表示尝试执行请求走私(第 9.5 节)或响应拆分(第 9.4 节)并且应该作为错误处理。发送方必须在将此类消息转发到下游之前删除接收到的 Content-Length 字段。(1)
我正在使用 node.js 和 npm-request 模块来发送请求并尝试解析响应。被调用的函数是
function createPostAPI(req, res, userid, detailText, title, location, custImpact){
var myJSONObject = {
"userId" : userid,
"apiKey" : "{API-Key}",
"detail" : {
"detailText" : detailText
},
"info" : {
"title":title
"location" : location,
"priority" : 0,
"customerImpact" : custImpact
}
}
request1({
url: "http://theAPIurl",
method: "POST",
body:JSON.stringify(myJSONObject)
json: true, // <--Very important!!!
body: myJSONObject
}, function (error, response, body){
console.log(error);
console.log(response);
console.log(body);
});
}
这是我得到的预期错误:
{ Error: Parse Error
at Error (native)
at Socket.socketOnData (_http_client.js:362:20)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:547:20) bytesParsed: 194, code: 'HPE_UNEXPECTED_CONTENT_LENGTH' }
但是,我可以看到 API 调用正在运行,因为我可以直观地验证它是否正在运行!也使用 Postman 我可以看到我需要的响应!
邮递员回应:
所以最后我的问题是,我能从我这边(客户端)做些什么来避免错误并从服务器读取 http 响应(即使格式错误)?为什么我可以在 Postman 中看到尸体?任何想法将不胜感激!
使用节点 v6.10.3