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

Что происходит здесь, вы анализируете данные ответа как двоичные данные (буфер) и нажимаете двоичные данные на массив. Двоичный объект, который вы видите в консоли на самом деле ожидаемое поведение :)

Если вы хотите ответ 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-вызовы WAY проще, чем собственный HTTP-модуль;)

+0

Спасибо Брэндон, очень понятно и полезно! –

+0

Не проблема! – brandonscript

 Смежные вопросы

  • Нет связанных вопросов^_^