HTTPClient類比登陸開心網001(from javaeye)

來源:互聯網
上載者:User

網站登陸分類 

不考慮HTTPS,網站通過瀏覽器登陸大約可以分為如下幾類 

  • 密碼明文傳輸,使用者在瀏覽器輸入使用者名稱密碼,然後用明文傳輸到網站。人人網就是這種做法。
  • 使用HTTP協議Authentication機制,一般網站使用的少。
  • 使用JS對使用者輸入的密碼進行處理,網路上不用傳輸純文字密碼了。開心001採用的這種做法。

另外: 有些網站也提供介面,讓使用者可以編寫用戶端來訪問網站,例如amazon s3。 

開心001的登陸開發實踐 

和人人一樣,我在做開心001登陸開始的時候也是使用badboy錄製登陸過程,用jmeter重放。發現登陸時並沒有直接發送密碼明文,而是用如下兩個參數代替: 

引用encypt 
rpasswd

猜測開心可能使用了一個encyptKey(encypt)對使用者輸入的密碼進行處理,產生一個rpasswd。通過firebug追蹤登陸過程,證實了這個猜想:如果使用者沒有登陸,每次訪問登陸頁面時,伺服器會發一個encyptKey到用戶端,返回在網頁裡(儲存成javascript變數的形式),使用者輸入密碼並提交後,會運行一段js代碼,這段代碼會使用encyptKey對密碼進行處理,產生rpasswd參數發送給伺服器進行校正。由於每次訪問登陸頁面伺服器返回的驗證碼不同,這就使得你在某次錄製產生的參數下次就不能登陸。 

發現這個問題後,嘗試了如下解決方案: 

  • HTTPClient是否能夠類比點擊按鈕,也就是說用HTTPClient完全類比使用者登陸全過程。遺憾的是,HTTPClient並不支援這個功能。
  • 是否有其它工具。HTTPUnit可以用了類比使用者點擊,但是下載嘗試以後,發現HTTPUnit並不好用,這條路沒有嘗試成功。
  • 在java中實現開心001網頁裡js要實現的功能,也就是:首先分析出encyptKey,然後用這個encyptKey加上自己實現js功能部分產生rpasswd,再發送到伺服器驗證。但是開心001關於驗證的js100多行,涉及大量位元運算,在java裡無bug的實現還是需要相當工作量的。
  • 經過仔細考慮,想到: 如果在java裡面可以調用js,那麼直接調用js的功能產生rpasswd不就可以了嗎? 很快就找到rhino這個工具,實踐中這個工具非常好用,讓人再一次感到了做java程式員的快樂


最終的登陸流程 

  • 登陸頁面,找到登陸頁面中關於驗證這塊的js代碼,並儲存放到java可以訪問的地方
  • 訪問登陸頁面,從頁面中分割出encyptKey
  • 使用rhino訪問前面儲存的js,使用encyptKey產生伺服器需要的參數rpasswd
  • 向伺服器發送參數進行驗證


源碼參考附件,運行前加一下開心的帳號和密碼。 

驗證碼問題 (補充) 
上一個文章裡,很多人問到驗證碼問題,關於驗證碼,個人簡單看法如下: 

  • 很多大網站為了提高使用者體驗在使用者第一次登陸時不要求使用者輸入驗證碼。只有在使用者密碼輸入錯誤後,才會要求輸入驗證碼。
  • 如果驗證碼是伺服器端產生的,除了分析圖片,也沒有更好的方法,如果驗證碼是用戶端產生的,比如: 使用js產生的,可以使用rhino來類比得到這個驗證碼。
  • 一般來說,登陸後,大部分網頁都可以訪問,大部分操作都可以類比。但是有些操作,比如說發文章,通常要求輸入驗證碼,就比較難做到自動化。如果你發現哪個網站寫文章不要去輸入驗證碼,你就去寫個機器人去刷屏吧,就象javaeye的問答頻道一樣

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.