感谢大神共享的js代码和相关的接口文档:https://github.com/Binaryify/NeteaseCloudMusicApi
我要做的是在Android上实现网易云音乐的功能,对于一个完全不懂JS的人,可以说不停地碰壁,很早前就知道这个资源,但是一直没研究出来,因为没耐心,可是不甘心啊,还想再试试。给自己一周时间吧。聊聊今天的收获:
大神已经在前面铺好了路,不懂JS没事,硬着头皮看代码。按照大神的操作步骤,现在本地把JS代码运行起来,接着攻可登录接口,
必选参数 : phone: 手机号码 password: 密码
接口地址 : /login/cellphone
可选参数 : countrycode: 国家码,用于国外手机号登陆,例如美国传入:1
调用例子 : /login/cellphone?phone=xxx&password=yyy
果不其然,在浏览器中调用成功了,url大致长这个样:http://localhost:3000/login/cellphone?phone=1375107xxxx&password=xxx(这都不会的话,我就不说啥了,多看几遍大神的文章,上面的链接)。但是我就想啊,登录接口谁会用get的方式。看代码看看究竟,用node.js看了下主要的代码块。大致上这样的子:
1、在util目录下有两个比较重要的文件
crypto.js:加密算法
aes加密,rsa加密,MD5加密,Base64加密,至于使用顺序和使用的次数,先不说了,先知道有这么回事儿
request.js:封装网络请求
请求部分目前就只关注登录部分,第一次请求cookie是空的,登陆成功以后会从header中拿到用户相关的cookie,在后续用户相关的请求中都会用到,js虽然不会,但是起码会写日志。果不其然,通过打印日志我发现是这样的:
phone: '1375107xxxx',
countrycode: undefined,
password: '713657427e4a917e43dc1400a183xxxx',
rememberLogin: 'true'
这个是真实的入参,countrycode是可以缺省的,password是MD5处理过的,先不整理相关代码,直接用日志中的密码。然后就是真实的请求方式其实是post,真正post的地址是https://music.163.com/weapi/login/cellphone,你以为知道所有的入参、请求方式和请求地址,是不是就能用postman成功登陆了?呵呵呵,并不能。encrypt.weapi(data)会对参数进行加密操作,加密后的样子大概是这样
加密算法里面涉及到随机数,所以这两个字段的内容每次都会变,你还是不能直接用postman测试。这两个也就是上面的各种aes、rsa处理(其他的请求还会获取csrf_token,根据日志来看,登录请求里面是没有的,而且根据不同的请求加密的方式会有差异,后续补上),最后就是用post的方式发请求然后解析后台的json数据,今天的研究到此为止。明天写个demo,整理算法,验证登录接口,我已经准备好改错了