来自http.get请求的特殊输出?

时间:2017-02-09 18:07:57

标签: node.js http

我正在尝试在重定向之后创建一个简单的http请求:

http.get('http://www.example.com/', function(res){
  var data = [];

  res.on('data', function(chunk){
    data.push(chunk)
  }).on('end', function(){
    var buffer = Buffer.concat(data);
    // console.log(buffer.toString('base64')) //This outputs random string
    console.log(buffer)
 })
})

我得到的回应是:

<Buffer 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a 3c 68 74 6d 6c 3e 0a 3c 68 65 61 64 3e 0a 20 20 20 20 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 ... >

我还尝试通过添加:

来解析JSON
var parsedData = JSON.parse(data); 
console.log(parsedData)

由于<符号未被json-parse模块处理而导致此错误。

res.statusCode正在输出200

我不确定这是编码错误还是请求无法遵循重定向?这看起来不像十六进制编码。

之前有其他人见过吗?

1 个答案:

答案 0 :(得分:2)

这里发生的是您将响应数据解析为二进制数据(缓冲区)并将二进制数据推送到数组。您在控制台中看到的二进制对象实际上是预期的行为:)

如果需要JSON响应,则需要将数据缓冲区附加到字符串然后解析它:

http.get('http://echo.jsontest.com/key/value/one/two', function(res){
    var data = '';

    res.on('data', function(chunk){
        data += chunk;
    }).on('end', function(){
        var json = JSON.parse(data);
        console.log(json);
    });
});

既然我们已经完成了这项工作,请查看request - 它使API调用比原生HTTP模块更容易;)