Javascript Node.js HTTPS.get返回状态代码406
我试图向API发出一个HPPTS请求,只使用内置的HTTPS模块。返回的状态代码是406,我还收到一个缓冲区错误:Javascript Node.js HTTPS.get返回状态代码406,javascript,node.js,http,https,Javascript,Node.js,Http,Https,我试图向API发出一个HPPTS请求,只使用内置的HTTPS模块。返回的状态代码是406,我还收到一个缓冲区错误: TypeError: buf.copy is not a function at Function.Buffer.concat (buffer.js:240:9) at IncomingMessage.<anonymous> (/var/task/index.js:562:41) at emitNone (events.js:72:20) at IncomingMess
TypeError: buf.copy is not a function
at Function.Buffer.concat (buffer.js:240:9)
at IncomingMessage.<anonymous> (/var/task/index.js:562:41)
at emitNone (events.js:72:20)
at IncomingMessage.emit (events.js:166:7)
at endReadableNT (_stream_readable.js:905:12)
at nextTickCallbackWith2Args (node.js:437:9)
at process._tickDomainCallback (node.js:392:17)
在响应端,responseText只是一个空格
那么我做错了什么?谢谢你的帮助和耐心
编辑:同样值得注意的是,如果我将Buffer.concat行更改为var responseString=responseBuffer.join();在回调(JSON.parse(responseString))上,错误变成这样;线路
SyntaxError:输入意外结束
at Object.parse(本机)
在收到消息时。(/var/task/index.js:564:27)
在emitNone(events.js:72:20)
在IncomingMessage.emit(events.js:166:7)
在endReadableNT(_stream_readable.js:905:12)
在下一次使用2args进行回调时(node.js:437:9)
在进程中。_tickDomainCallback(node.js:392:17)
基于以下文档,Buffer.concat需要缓冲区列表或Uint8Array
作为参数
在将字符串推送到数组之前,可以尝试以下方法将其转换为缓冲区
response.on('data', function(d) {
responseBuffer.push(Buffer.from(d, 'utf8'));
});
请在此处查看详细问题
希望有帮助看起来有两个不同的问题:
- 调用
时,节点会自动将传入数据转换为字符串。这意味着response.setEncoding('utf8')
事件使用字符串触发,而不是数据
s 这意味着您需要将流保持在二进制模式(通过不调用缓冲区
),保持缓冲区数组,然后在末尾将它们连接并转换为字符串setEncoding
…或保留response.on('end', function() { try { var responseString = Buffer.concat(responseBuffer).toString('utf8'); resolve(JSON.parse(responseString)); } catch(ex) { reject(ex); } });
调用并执行简单的字符串连接setEncoding
我建议使用前者以获得更好的性能(节点必须执行一些内部缓冲以处理流模式下的多字节字符)response.on('data', function(str) { responseString += str; });
- 您使用的API返回的是406(不可接受)。这可能意味着您必须在请求中提供
标题Accept
responseBuffer.push(d)代码>d缓冲区?responseBuffer是一个数组,d是一个字符串。然后我认为这就是问题所在。谢谢你的响应,将该行更改为responseBuffer.push(buffer.from(d,'utf8'));抛出错误“TypeError:utf8不是函数”。但我认为主要的问题不是缓冲区,而是我如何提出请求。我将意外的输入结束错误作为编辑添加到主帖子中。再次感谢!我认为TypeError:buf.copy不是一个函数
表明这是因为缓冲区。可能使用类似于缓冲区的东西。来自(d)。顺便问一下,您的节点版本8.6.0是什么,您对SyntaxError:输入意外结束问题有何看法?responseString是从缓冲区加入的。我认为它不完整,所以JSON.parse为它抛出了错误
response.on('end', function() {
try {
var responseString = Buffer.concat(responseBuffer).toString('utf8');
resolve(JSON.parse(responseString));
} catch(ex) {
reject(ex);
}
});
response.on('data', function(str) {
responseString += str;
});