模擬登陸流程

不論是搶購火車票仍是電商網站上搶購商品,若是在節假日沒有搶購工具是很難靠手動搶到的,因此市面上的搶購工具也是層出不窮,但流程都是差很少的,大致上分爲2步:html

1.模擬用戶登陸
2.發送訂單請求

今天主要介紹一下第一步:模擬用戶登陸,做爲登陸我也把它拆分紅了這4步:java

1.準備登陸
2.驗證碼
3.執行登陸請求
4.驗證登陸是否成功

準備
1.chrome瀏覽器:由於須要藉助chrome強大的開發者工具
2.開源中國的在線工具:密碼的加密解密和一些格式化工具方便查看
3.eclipse:開發工具git

模擬登陸--如下僅供我的學習使用github

1.分析請求地址算法

主要分析驗證碼的請求,登陸的請求,以及爲登陸提供參數的請求,選定一個網站好比:開源中國,進入它的登陸界面:https://www.oschina.net/home/login,這時候打開開發者工具(ctrl+shift+i),如圖:chrome

咱們主要關心的是Network這個標籤頁瀏覽器

驗證碼的請求:
咱們發現有些網站沒有驗證碼好比:開源中國京東,還有些直接須要驗證碼好比:華爲商城,其實這些沒有驗證碼的網站只是在正常登錄的狀況下沒有,當出現一些非正常狀況會出現驗證碼,好比連續屢次登錄失敗,全部咱們能夠經過這個方式讓驗證碼框出現,以下圖:eclipse

這時候咱們想獲取驗證碼的請求就很容易了,點擊:換另一張圖片,這時候看Network標籤:工具

咱們能夠開啓另一個瀏覽器標籤頁:https://www.oschina.net/action/user/captcha,每次刷新都產生一個新的驗證碼post

登陸的請求:
爲了方便查看登陸請求地址,咱們能夠寫一個錯誤的密碼,方式和上面同樣,以下圖所示:

是以post方式發送的請求,全部咱們須要找到Form Data,在Headers標籤的最下面就是Form Data數據:

email:******@126.com
pwd:90ba8346f7f1a304a0e53abbf97ebc5051a3837d
verifyCode:
save_login:1

一共4個參數,分別是:用戶名,密碼,驗證碼和save_login,這個參數仍是比較少的,都是用戶本身輸入的參數,沒有須要咱們得到額外的參數;
關於pwd參數,有些網站是加過密的好比:開源中國,這裏具體用的什麼加密算法,其實咱們剛開始並不用去查看網頁的JavaScript腳本,找出裏面到底用的什麼算法,咱們能夠用窮舉法,由於經常使用的加密算法就那麼幾種:md5,base64,aes,des,sha1等,全部咱們徹底能夠先大體看一下,很幸運當前使用的加密算法是:sha1

爲登陸提供參數的請求:
這個請求是根據登陸的請求來的,若是咱們在Form Data中有一些其餘的參數,這時候就須要額外的請求來獲取Form Data中的參數,好比在模擬京東登陸的時候就有這個需求,通常狀況下須要請求的地址就是登陸頁面https://www.oschina.net/home/login,不少參數都在你進入登陸界面的時候發送過來了,但具體參數在什麼地方就不肯定了,有可能在html代碼裏面,也可能在腳本里面,也有多是其餘的某個請求,這個就須要根據實際狀況,本身作一些分析

2.整理思路寫代碼

總體思路就是剛剛上面提到的:

1.準備登陸
2.驗證碼
3.執行登陸請求
4.驗證登陸是否成功

代碼結構:

/**
	 * 登錄 分紅4個步驟: 1.爲登陸準備必要的參數 2.獲取驗證碼 3.執行登陸 4.驗證登陸成功
	 */
	public void login() {
		try {
			readyLogin();

			getAuthCodeImage();
			getInputAuthCode();

			int result = executeLogin();
			if (result == Constants.SUCCESS) {
				testLogin();
			}
		} catch (Exception e) {
			logger.error("登錄異常", e);
		}
	}

	/**
	 * 準備登陸
	 * 
	 * @throws Exception
	 */
	protected abstract void readyLogin() throws Exception;

	/**
	 * 執行登錄
	 * 
	 * @return 登錄的結果
	 */
	protected abstract int executeLogin() throws Exception;

	/**
	 * 登錄成功,進行測試
	 * 
	 * @throws Exception
	 */
	protected abstract void testLogin() throws Exception;

	/**
	 * 獲取驗證碼圖片
	 * 
	 * @throws Exception
	 */
	private void getAuthCodeImage() throws Exception {}

	/**
	 * 獲取用戶輸入的驗證碼
	 * 
	 * @throws IOException
	 */
	private void getInputAuthCode() throws Exception {}

	/**
	 * 獲取準備登陸地址
	 * 
	 * @return
	 */
	protected abstract String getReadyLoginUrl();

	/**
	 * 獲取驗證碼圖片地址
	 * 
	 * @return
	 */
	protected abstract String getAuthCodeImageUrl();

	/**
	 * 獲取登錄地址
	 * 
	 * @return
	 */
	protected abstract String getLoginUrl();

針對這個結構分佈模擬了:開源中國,京東,華爲商城  3個網站的登陸

詳細代碼:https://github.com/ksfzhaohui/simulation-login

總結

其實模擬登陸說白了就是看你對http協議是否瞭解,還有就是細心觀察,固然還有其餘一些網站可能就不那麼簡單了,好比淘寶,可能還須要其餘方面的知識,好比加密解密.

最後再說一遍:以上僅供我的學習使用

相關文章
相關標籤/搜索