请求堆栈溢出API返回怪异的响应

我正在使用下面的代码来调用堆栈溢出API:

var request = require('request'); var url = 'http://api.stackexchange.com/2.2/search?order=desc&sort=activity&tagged=node.js&intitle=node.js&site=stackoverflow'; request({ headers: { 'Accept': 'application/json; charset=utf-8', 'User-Agent': 'RandomHeader' }, uri: url, method: 'GET' }, function(err, res, body) { console.log("response.statusCode" + res.statusCode); console.log("response.headers" + JSON.stringify(res.headers)); console.log("res" + JSON.stringify(res)); console.log("resParse" + JSON.parse(res)); }); 

}

这段代码以奇怪的字符的forms返回响应:

 res{"statusCode":200,"body":"\u001f \b\u0000\u0000\u0000\u0000\u0000\u0004\u0000  {  H   \n I ]M   ̬U 5ݳ7= 3 ک mݝN  L t  \u0005\\\u001e h  E  q ]    \\ \u0011 ɏxe  \"   \\   o J? \u001f   o jq X     <   A?ݸv6Z   \u0012~F N   v ?7 |  bq ۢ  mՈ   Ŷ  Cj\u0016  b I \u001e  \u001b     iY  \u001aw \"Oҕ}H  ѝ\\Vզ \r\u0002    m c\u001b     : \bsJ\u0010f   \u0012  M\u001aW ¾w ߭t\u0001\u001an\u0016&-7+    ) _ Oz }  \u0005 \\    *p       \u0016 *   p Y\u0006 m\u0007e- ?:  o\u0016i   rW  m W  Y< v \u0010 ۬  ˛E3 ; n\u0016e \u0017    e   *}J    \u0015\u001c  0,B   \".l  #    e} -*\u0015  \u0018  gӉ A'\u0013\u001c   \u0014  o\u001f3 undefined:1 [object Object]  res{"statusCode":200,"body":"\u001f \b\u0000\u0000\u0000\u0000\u0000\u0004\u0000  {  H   \n I ]M   ̬U 5ݳ7= 3 ک mݝN  L t  \u0005\\\u001e h  E  q ]    \\ \u0011 ɏxe  \"   \\   o J? \u001f   o jq X     <   A?ݸv6Z   \u0012~F N   v ?7 |  bq ۢ  mՈ   Ŷ  Cj\u0016  b I \u001e  \u001b     iY  \u001aw \"Oҕ}H  ѝ\\Vզ \r\u0002    m c\u001b     : \bsJ\u0010f   \u0012  M\u001aW ¾w ߭t\u0001\u001an\u0016&-7+    ) _ Oz }  \u0005 \\    *p       \u0016 *   p Y\u0006 m\u0007e- ?:  o\u0016i   rW  m W  Y< v \u0010 ۬  ˛E3 ; n\u0016e \u0017    e   *}J    \u0015\u001c  0,B   \".l  #    e} -*\u0015  \u0018  gӉ A'\u0013\u001c   \u0014  o\u001f3 undefined:1 [object Object] 

相同的代码适用于不同的API调用。 有人可以build议出了什么问题?

Stackoverflow使用压缩来响应您的请求。 我已经得到正确的回应使用以下内容:

 var request = require('request'); var url = 'http://api.stackexchange.com/2.2/search?order=desc&sort=activity&tagged=node.js&intitle=node.js&site=stackoverflow'; request({ headers: { 'Accept': 'application/json; charset=utf-8', 'User-Agent': 'RandomHeader' }, uri: url, method: 'GET', gzip: true }, function(err, res, body) { console.log("response.statusCode" + res.statusCode); console.log('server encoded the data as: ' + (res.headers['content-encoding'] || 'identity')) console.log('the decoded data is: ' + body) }); 

我的第一个回答是你应该谷歌JS承诺。 我的第一个猜测是它必须是promisified对象。 如果它是一个图像,由于JSasynchronous性质,你必须首先promisify它。 如果不是诺言,那是造成这个问题的原因,确保它是“UTF-8”支持的语言。