經(jīng)過前兩章的web端分析,不知道你是否掌握了一點技巧呢?
本次易班偽“外掛”編寫教程,也應(yīng)該要結(jié)束了,用三章的分析過程,我想你也應(yīng)該學(xué)會了如何去分析易班web端的其他功能并用代碼模擬出相關(guān)的請求來了,雖然我也想多寫幾個功能,但想想那其實不是很現(xiàn)實,易班web端功能那么多,我不可能一個個的去寫出來,其實你們只要掌握了瀏覽器調(diào)試工具的網(wǎng)絡(luò)請求分析的使用,加上用代碼模擬HTTP請求,基本上就可以自己去嘗試分析其他的功能了,本教程的意義在于:授人以魚不如授人以漁。所以我也不必把所有的功能都分析出來,主要就是把我的分析過程跟大家分享,讓你們通過我的分析過程,能夠自己掌握和理解web端網(wǎng)站的網(wǎng)絡(luò)請求和模擬HTTP請求訪問,只要掌握了這門“技術(shù)”分析起其他網(wǎng)站,應(yīng)該也不在話下,但是難度肯定是有的,畢竟不同的網(wǎng)站,有些數(shù)據(jù)的處理也不盡相同,很有可能就會遇到本教程的第二章登錄分析時密碼加密的問題,如果遇到比較高端的加密技術(shù)和流程處理,那分析起來肯定會很困難,因而分析不出來也情有可原。
好了,開始本教程的最后一章,易班WEB端簽到功能。
打開火狐瀏覽器,登錄易班后打開易班首頁(確保帳號處于未簽到狀態(tài)),然后打開火狐瀏覽器的網(wǎng)頁調(diào)試工具,然后點擊網(wǎng)頁右側(cè)的簽到按鈕
會彈出簽到框,在調(diào)試工具中也會出現(xiàn)一個網(wǎng)絡(luò)請求,我們點開它,查看其返回的相關(guān)信息,會發(fā)現(xiàn)返回了一個json字符串,其內(nèi)容格式如下:
其中data.survey里面的html內(nèi)容很重要,它就是在頁面顯示的問題信息,等后面我們再分析這段html的內(nèi)容,現(xiàn)在先用瀏覽器簽到看看會產(chǎn)生什么樣的請求,以及請求參數(shù)。
我勾選了問題的第一選項,然后點擊了完成,瀏覽器調(diào)試工具出現(xiàn)了第二個請求信息,
點開看一下這個請求的路徑信息以及參數(shù)信息
發(fā)現(xiàn)它向服務(wù)器傳遞了兩個參數(shù),分別為optionid[]和input,并且在響應(yīng)信息中返回的數(shù)據(jù)為”提交調(diào)查并簽到成功“,現(xiàn)在我們開始分析這第二個請求的參數(shù)optionid[]的值與前面的html信息的聯(lián)系了,先來看一遍前面的html代碼,經(jīng)過格式化之后,它的內(nèi)容如下:
<h4 class="dialog-title">簽到<span>(已簽到<strong class="sign-sum">244</strong>天)</span></h4> <div id="sign-survey" data-type="0"> <dl> <dt>在大學(xué)期間你大部分的情緒是怎樣的?</dt> <dd><i class="survey-option" data-value="8663" data-input="0"></i><span class="survey-reason">樂觀積極、凡事往好的方面想</span></dd> <dd><i class="survey-option" data-value="8665" data-input="0"></i><span class="survey-reason">平平靜靜、無多大變化</span></dd> <dd><i class="survey-option" data-value="8667" data-input="0"></i><span class="survey-reason">消極悲觀、總想到不好的事情</span></dd> </dl> </div>我們現(xiàn)在可以發(fā)現(xiàn)html中的代碼與第二個網(wǎng)絡(luò)請求參數(shù)optionid[]的值的聯(lián)系了,在第二個網(wǎng)絡(luò)請求中optionid[]的值為8663,在上面的html代碼中,第一個選項dd元素下的i元素,這個i元素有一個data-value屬性,其值恰好為8663,所以我們可以得出在簽到時,回答問題的optionid[]值就是第一個網(wǎng)絡(luò)請求返回的html代碼里面i元素的data-value屬性值,接下來我們就可以嘗試編寫相應(yīng)的代碼了。
public static void main(String[] args) throws Exception { User user = new User(); String re = login(user.getAccount(), user.getPassword()); System.out.println("登錄時返回的COOKIE信息:"+cookie); String re2 = qianDao(); } /** * 易班簽到 * @return * @throws Exception */ public static String qianDao() throws Exception { // 獲取簽到時的調(diào)查問題信息 HttpConfig config = new HttpConfig("http://www.yiban.cn/ajax/checkin/checkin"); config.setAjax(true); config.setDefaultAccept(); config.setHeader("cookie", cookie); byte[] re = Http.post(config); String json1 = new String(re); JSONObject json = JSONObject.parseObject(json1); System.out.println("獲取簽到信息返回的問題數(shù)據(jù):"+json); Document dom = Jsoup.parse(json.getJSONObject("data").getString("survey")); Elements iElmList = dom.getElementsByTag("i"); // 獲取所有i元素的標(biāo)簽 Element iElm = iElmList.get(0); // 獲取到第一個i元素 String optionid = iElm.attr("data-value");// 獲取第一個i元素的data-value屬性值 Params params = new Params(); params.add("optionid[]", optionid); params.add("input", ""); config.setUrl("http://www.yiban.cn/ajax/checkin/answer"); config.setData(params.getParams()); re = Http.post(config); String json2 = new String(re); System.out.println(JSONObject.parseObject(json2)); return json2; }編寫完后代碼如上,然后借別人的帳號來測試一下,比較之前自己的帳號已經(jīng)簽到過了,所有只能拿別人沒有簽到過的帳號來測試一下代碼結(jié)果,不出意外的話,會看到如下信息:
如果已經(jīng)簽到過的話,在運行簽到代碼,會報一個錯誤,因為在獲取簽到調(diào)查問題時提示已經(jīng)簽到,沒有返回html信息,在后面的代碼獲取html信息為null,因而會出現(xiàn)錯誤,比如這樣:
本章簽到分析就結(jié)束了,也是本教程的最后一章了,你可以在這里獲得本章的代碼:https://github.com/houkunlin/utils-http/blob/master/src/test/java/cn/goour/utils_http/WebYiBanQianDao.java
以上就是【我的下巴掉了!易班偽“外掛”編寫(四)WEB簽到--十二研究所】的全部內(nèi)容。
評論