【发布时间】:2022-01-28 14:02:55
【问题描述】:
我正在尝试从 node.js 发出 GET 请求。这个请求是对一个 REST 服务器的,它将访问 Hbase 并返回数据。 GET 请求中包含所有必要的 Hbase 信息(表、键、列族等)。以下是代码。
var http = require('http');
var url = {
host: '127.0.0.1',
port: 8000,
path: '/table-name/key/column-family',
headers: {
'Content-Type': 'application/octet-stream'
},
};
http.get(url, function(resp){
console.log("Status: " + resp.statusCode);
console.log("Header: " + JSON.stringify(resp.headers));
resp.setEncoding('utf8');
var completeResponse = '';
resp.on('data', function (chunk) {
completeResponse += chunk;
});
resp.on('end', function(chunk) {
console.log(completeResponse);
});
});
我的问题是我得到的响应并不总是按要求提供八位字节流。大多数情况下,数据的格式都是有效的,标题如下。
{"content-length":"454","x-timestamp":"1395469504346","content-type":"application/octet-stream"}
但是,假设 10 次响应中的 1 次是带有如下标头的 XML 字符串。
{"content-type":"text/xml","content-length":"793"}
两种情况下的状态码都是 200,我总是请求现有的密钥。这种行为看似随机,并非由任何特定键引起。
如何确保响应始终是八位字节流而不是 XML / JSON?
【问题讨论】:
-
以下似乎有效。 headers: { Accept: 'application/octet-stream' } 不需要内容类型。有人可以确认这是否是正确的方法吗?
-
Accept将代替Content-Type起作用。Accept是一个请求标头(您正在发送),而Content-Type是一个响应标头,因此会随响应一起提供。