困惑:http.get请求结果正常,superAgent.get请求结果不对
发布于 8 年前 作者 qiulanzhu 6690 次浏览 来自 问答

环境: 0s:win7,32位。 node:v4.4.4

情景1:http.get请求,结果正常

var  http = require('http');
http.get('http://hq.sinajs.cn/list=sh601006', function(res) {
    var data = '';
    res.on('data', function(chunk){
        data += iconv.decode(chunk, 'GBK');
    });
    res.on('end', function(){
        console.log(data);
    });
}).on('error', function(e) {
    console.log("Got error: " + e.message);
});

执行结果(这是想要的结果):

var hq_str_sh601006="大秦铁路,6.090,6.090,6.040,6.090,6.040,6.040,6.050,33330420,201913964.000,559480,6.040,938600,6.030,891600,6.020,1572400,6.
010,1421700,6.000,60400,6.050,635400,6.060,955500,6.070,1043876,6.080,992088,6.090,2016-07-08,15:00:00,00";

情景2: superAgent.get请求,没有得到预期的结果

当换成用superAgent来请求的时候问题出现了。

var superAgent = require('superagent');
var url = 'hq.sinajs.cn/list=sh600039';
superAgent
    .get(url)
    .end(function (err, res) {
        if (err) {
            return console.log(err);
        }
        logger.ndump('res', res);//换成console.log(res.text); 打印结果是undefined
    });

执行结果(没有res.text):

VARIABLE<res>: {"req":{"method":"GET","url":"hq.sinajs.cn/list=sh600039"},"header":{"cache-co
ntrol":"no-cache","content-length":"170","connection":"Keep-Alive","content-type":"application/x-javascript; charset=GBK","content-encoding":"gz
ip"},"status":200}

情景三:浏览器直接访问,可以得到数据。

1.png

即使加入以下头部,请求也没有想要的数据。

superAgent
    .get(url) 
	.set('Accept:text/html', 'application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8')
	.set('Accept-Encoding', 'gzip, deflate, sdch')	
	.set('Accept-Language', 'zh-CN,zh;q=0.8,en;q=0.6')

2.png

问题:用superAgent,怎么才能得到想要的数据。

6 回复

换成res.body试试

@jiangli373 试了,结果是{}。

var url = 'hq.sinajs.cn/list=sh601006';
superAgent
.get(url).buffer(true).end(function(err,res){ 
    console.log(res.text) 
})

因为这个地址请求返回的mime type 是 application/x-javascript

https://github.com/visionmedia/superagent/issues/523

@jiangli373 十分感谢。

回到顶部