以前用網頁填表玩了下京東的操作,雖然網頁填表操作簡單,但是缺點也相當的明顯。后來就想着試試post來登錄京東。
post登錄京東重點就是下面幾點:
第一:獲取到正確的封包,這個時候需要我們多抓幾次包來進行對比,發現其中的不同點和相同點
第二:登錄驗證碼的問題,如果不用軟件登錄的話,很多時候是不需要驗證碼,但是用post貌似是必須要驗證碼
第三:網頁登錄頁面源碼含有post提交參數
下面我們依次來分析下:
獲取正確的封包
uuid=487d1f6e-e6c5-4c23-944b-e7c994a7f81d&loginname=j*&nloginpwd=d*&loginpwd=d*&machineNet=&machineCpu=&machineDisk=&authcode=&TSmOricmTZ=gniON
這是第一次抓取的post包。TSmOricmTZ=gniON這一段里等號前面是參數名稱,后面是參數的值。大家注意下,一般來說參數名稱是不變的,值是可變的。大家肯定要問,這有什么好注意的肯定是這樣啊,但是問題就來了,往往大家都以為這樣的東西才會麻痹我們。不信,我們下面再抓一次包看看。
uuid=fe441e02-6d4b-41ad-bb1a-94f057d8eb5e&loginname=j*&nloginpwd=d*&loginpwd=d*&machineNet=&machineCpu=&machineDisk=&authcode=&QnadIHWfDr=Vozag
發現什么不同了嗎,后面那段等號前面的名稱也是可變的,不僅僅是值是可變的。所以大家抓包的時候一定多抓兩次,這樣對比的話,才能發現問題更加准確!
注意登錄驗證碼的問題
大家如果看post包里面的&authcode=&這一段,第一反應就是驗證碼為空。這是沒錯的,我們多抓幾次包都是這樣,並且我們登錄的時候,頁面也確實是沒有驗證碼選項的。
post抓取是沒有任何問題的,但是問題反而就來了。當我按照這種格式驗證碼為空的提交的時候,響應的數據提示“驗證碼為空”,一直無法登錄成功,這讓我百思不得其姐!
最后只剩下一個解釋:post提交必須帶上驗證碼。
如何獲取到驗證碼的包呢,登錄頁面一般又不是經常出現驗證碼,只有重復刷新登陸幾次了。最后想要的頁面終於出現了。
https://authcode.jd.com/verify/image?a=1&acid=46e37f33-c280-410f-822e-3295caae06fd&uid=46e37f33-c280-410f-822e-3295caae06fd&yys=1425883312677
上面就是驗證碼的包,仔細分析下這個包的數據,acid的值和uid的值是一樣的,這兩個是相同的都是uuid的值。最后就是搞不清楚yys=1425883312677這段是什么,也無法獲取到。這個問題差點讓我望而卻步,正常的想法肯定是如果沒有這段應該不能成為正確的驗證碼包。后來果斷的去掉后面那段,提交ie試試,結果也出現了驗證碼圖片。很驚喜!
https://authcode.jd.com/verify/image?a=1&acid=46e37f33-c280-410f-822e-3295caae06fd&uid=46e37f33-c280-410f-822e-3295caae06fd
竟然也能出現驗證碼,得到驗證碼,那就用這段當作驗證碼包應該問題不大,后面證明這個嘗試是正確的!
獲取post提交參數
關於上post的參數,上面也說了,uuid和后面那幾個值,都在登錄頁面的源碼里面可以搜索到!用正則取就可以了!!!
好了就說那么多,京東電腦版的post登錄基本重點都是這些了,還是比較的簡單,以后京東登錄會改版,這個目前是試用的!