感謝大神共享的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,在后續(xù)用戶相關的請求中都會用到汁雷,js雖然不會净嘀,但是起碼會寫日志。果不其然侠讯,通過打印日志我發(fā)現是這樣的:
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,根據日志來看拨黔,登錄請求里面是沒有的蛔溃,而且根據不同的請求加密的方式會有差異,后續(xù)補上)篱蝇,最后就是用post的方式發(fā)請求然后解析后臺的json數據贺待,今天的研究到此為止。明天寫個demo零截,整理算法麸塞,驗證登錄接口,我已經準備好改錯了