抓取百度音乐(iPhone客户端)封包的一次实践
编辑时间:2017-03-26 作者:金满斗 浏览量:2081 来源:http://bbs.aardio.com/forum.ph

转至:http://bbs.aardio.com/forum.php/?mod=viewthread&tid=8548


很早之前,程序员们就发明了“采集”这个玩意儿;现在,我们也离不开“采集”,比如在自己的程序中嵌入一个天气预报的功能。我们也许已经习惯于使用 inet.whttp 下载网页源码,再用模式匹配进行匹配处理,得到我们想要的数据了。不过这样的“采集”是“不合法”的,网站只要一改版,那就得一把鼻涕一把泪,卷土重来了。

很早之前,程序员们就发明了“采集”这个玩意儿;现在,我们也离不开“采集”,比如在自己的程序中嵌入一个天气预报的功能。我们也许已经习惯于使用 inet.whttp 下载网页源码,再用模式匹配进行匹配处理,得到我们想要的数据了。不过这样的“采集”是“不合法”的,网站只要一改版,那就得一把鼻涕一把泪,卷土重来了。

还好,随着智能手机的普及,很多软件诸如 QQ、百度音乐,都为智能手机提供了“绿色通道”——即XXX专用客户端。不过,我们已经习惯了我们在电脑上的抓包工具,例如 Firebug、SmartSniff。在智能机上怎样抓包,这确实是一个问题。

今天,我给大家带来一个可行的方案,以百度音乐iPhone客户端为例。

原理很简单,五个字——代理服务器。只需要在电脑上建立一个代理服务器,手机上设置好代理服务器即可。不过,需要注意的一点就是,手机需要与电脑处于同一局域网内(否则较为麻烦,需要得到外网IP,使用路由器的还需要映射端口)。

第一步、架设代理服务器
代理服务器软件有很多,这里我以 CCProxy 为例。软件请大家自行搜索下载,设置很简单。

打开 CCProxy:
 
设置->高级->网络 中取消“进制局域网外部用户”(经测试,虽然是局域网内部用户,但不取消似乎无法成功,也许是版本问题):
 
第二步、设置手机代理服务器
不同系统设置方式不同,这里以 iPhone(iOS) 为例。

打开 设置->Wi-Fi 网络:
 
点右侧的三角,进入设置,在 HTTP代理 中选择“手动”,并且输入电脑的内网IP,以及代理服务器的端口:
 

第三步、开始抓包吧!

接着我们就可以用我们最熟悉的抓包软件抓包了!我这里使用 SmartSniff。在 Capture Filter(过滤器)中输入:
include:both:tcp:手机分配到的IP
开始抓包后,拿出我们的手机,访问网页(或者打开应用),这里我打开百度音乐,很快就抓取到了封包。

这里我分享一下抓取的结果。百度音乐iPhone客户端果然是有一个 rest 服务器,直接返回 json 数据(也可以返回 xml 数据)。这样的接口一般来说比较长久,可以放心使用。

测试下面的接口时,大家可以指定输出为 xml 格式,方便在浏览器中查看。

搜索建议:
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.suggestion&query=%E7%AB%A5&format=json&from=ios&version=2.1.1
query: 关键字
format: json/xml

新歌榜:
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&format=json&offset=0&size=50&from=ios&version=2.1.1
offset: 结果偏移(50表示从第50首歌曲开始)
size: 获取多少首歌曲

热歌榜:
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=2&format=json&offset=0&size=50&from=ios&version=2.1.1

歌手榜:
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=3&format=xml&offset=0&size=50&from=ios&version=2.1.1

搜索歌曲:
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common&query=%E7%AB%A5%E5%B9%B4&page_size=500&page_no=1&format=json&from=ios&version=2.1.1
query: 关键字
page_size: 每页数量
page_no: 当前页码


来说两句吧