今天有朋友想要用程序模擬網易163郵箱注冊,但是遇到了一些小問題,小菜特准備了一篇文檔,希望可以幫到需要的朋友。
模擬程序整體流程圖:
整個過程必須使用同一個模擬對象!
注冊說明:
l post方式提交
l 參數列表:name=A12312312AASD&flow=main&uid=A12312312AASD@163.com&password=a123123&confirmPassword=a123123&mobile=&vcode=xxx&from=email163。name參數是用戶輸入的郵件名稱;flow參數不用動;uid參數是用戶輸入的郵件名+用戶選擇的郵箱類型,也就是完整的郵件名稱。password參數是密碼;confirmPassword參數是確認密碼;mobile參數留空;vcode參數是驗證碼;from參數不用動。
l 提交地址:https://ssl.mail.163.com/regall/unireg/call.do?cmd=register.start&reforward=common/reform&targetCmd=register.ctrlTop
郵件地址驗證說明:
l post方式提交
l 參數列表:name=a12312312aa
l 提交地址:http://reg.email.163.com/unireg/call.do?cmd=urs.checkName
l 原理:當我們請求郵件注冊地址(http://reg.email.163.com/unireg/call.do?cmd=register.entrance)的時候會在服務器端創建一個session,這個session會用來保存郵件地址信息,當我們提交表單的時候,一定會用到這個session,因此,在提交表單之前一定要先驗證郵件地址(相當於向session中添加數據)。用程序模擬的時候,應該是先請求郵件注冊地址,然后驗證郵件地址,最后提交表單,並且一定要保證這三個步驟用的是同一個對象,這樣才能保持session會話。
郵件地址驗證返回代碼說明:
l vip163, vip126, vip188, 126.com , yeah.net 這些郵箱可以注冊,也就是說,哪個郵箱可以注冊,哪個郵箱就會出現在這個字符串中,里面的參數1,作用未知。返回代碼:{"code":200,"desc":"OK","result":{"vip163":1,"vip126":1,"vip188":1,"126.com":1,"yeah.net":1}}
l 全部已注冊,也就是沒有任何郵箱可以注冊返回。返回代碼:{"code":200,"desc":"OK"}
密碼驗證說明:
l 密碼驗證是在客戶端javascript腳本中驗證完成的,無需與服務器交互。
驗證碼說明:
l get方式獲取
l 驗證碼獲取地址:http://reg.email.163.com/unireg/call.do?cmd=register.verifyCode&v=common/verifycode/vc_en&env=923076068445&t=1365956401862
l 說明:很明顯,提交地址上最后一個參數t是時間戳,防止出現緩存問題,我們用程序模擬提交的時候,也隨便用一個時間戳代替即可。但是這個地址上還有很多其他的參數,這些參數絕對是有用的,貌似可以保證驗證碼只在當前會話中有效,暫且可以讓它們保持不動。但是,請求驗證碼的對象和上邊所說的對象也應該是同一個!也就是說,整個模擬程序,只可以使用一個對象,必須保證會話的一致性。
以上僅僅是猜測,小菜並沒有測試,僅供參考,如有錯誤之處,望諒解!