浏览器能正常访问的url,superagent不能正常访问

在写音乐播放器的过程中,我需要获取qq音乐排行榜的信息,于是我向以前一样,在后台的MusicController中添加一个getTopList方法

然后写下以下代码

// 获取排行
async getTopList(ctx) {
const url = 'https://c.y.qq.com/v8/fcg-bin/fcg_myqq_toplist.fcg'
const data = Object.assign({}, commonParams, {
g_tk: 5381,
uin: 0,
format: 'json',
notice: 0,
platform: 'h5',
needNewCode: 1,
_: 1533213793328
})
ctx.body = await request.get(url)
.query(data)
.then(res => {
return res.text
})
}

然后使用postman来测试我的接口

神奇的事情发生了,204 no content。。。

我试着打印了一下发现res.text是undefine

于是我又考虑是不是referer的原因,添加了以下两行代码

.set('referer', 'https://y.qq.com/m/index.html')
.set('host', 'c.y.qq.com')

结果还是undefine

这下我没办法了,开始了面向google编程

最后在superagent仓库中的issue中找到了解答

原来当mime的type是x-javascript时,superagent获取数据没有缓冲,需要添加buffer(true)才能获取到,

 ctx.body = await request.get(url)
.query(data)
.set('referer', 'https://y.qq.com/m/index.html')
.set('host', 'c.y.qq.com')
.buffer(true)
.then(res => {
return res.text
})

这样我就获取到了正确的数据

接下来我就开始搜索x-javascript到底是何方神圣 ,在*上看到了这篇文章

原来application/x-javascripttext/javascriptapplication/javascript的一个过渡,而且x-javascript是实验性的,请不要使用他

上一篇:【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介


下一篇:Go语言的学习