2017-02-09 157 views
1

我试图做一个遵循重定向一个简单的HTTP请求:来自http.get请求的奇怪输出?

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-解析模块处理后的<符号此错误。

res.statusCode正在输出200

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

有没有其他人看过这个?

回答

2

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

如果你想有一个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模块更容易;)

+0

感谢布兰登,非常明确和乐于助人! –

+0

不是问题! – brandonscript