2017-02-09 94 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