版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、鄭州大學畢業(yè)設(shè)計(項目報告)題 目: 基于HTTPS協(xié)議的12306搶票軟件設(shè)計與實現(xiàn) 指導(dǎo)教師: 張宏濤 職稱: 講師 學生姓名: 魏超凡 學號: 20097740242 專 業(yè): 計算機科學與技術(shù)(軟件測試方向) 院(系): 軟件學院 完成時間: 2013年5月24日 2013年 5 月 24 日 目錄1項目開發(fā)目標11.1項目來源11.2開發(fā)目標12項目總體設(shè)計32.1技術(shù)框架設(shè)計32.2功能模塊設(shè)計32.3功能接口介紹42.3.1 登錄接口52.3.2 查詢聯(lián)系人接口52.3.3 查詢余票接口62.3.4訂票接口63項目功能描述83.1登陸模塊83.2查詢聯(lián)系人模塊93.3查票模塊93
2、.4訂票模塊103.5定時刷新查詢余票113.6響鈴提醒113.7腳本自動化114項目技術(shù)創(chuàng)新134.1技術(shù)創(chuàng)新及特點134.2個人收獲與體會135附言14附一 參考文獻15附二 項目源代碼視圖16附三 項目部署物理視圖17附四 軟件使用說明1818 / 20文檔可自由編輯打印1項目開發(fā)目標1.1項目來源2013年的春節(jié),網(wǎng)上吵的最厲害的就是火車票訂票軟件了,有人說它是流氓軟件,插隊搶票,也有人很是贊好它,說用它訂票更順利了,不用一直呆在電腦面前,刷新頁面查余票,再一步一步操作了,被網(wǎng)友熱捧為“搶票神器”。這是大眾的眼睛,但是作為程序員的我們,想的最多的莫過于它的原理了,甚至都想自己實現(xiàn)一個類
3、似的軟件。于是,我后來就特意用了一段時間,去網(wǎng)上收集搶票的原理,果然,與我開始時想的不謀而合-HTTP協(xié)議編程。不過12306用的是加密的HTTPS協(xié)議,其實與HTTP協(xié)議差不多,說的簡單一點,就只是加了一個非對稱加密功能和簽名而已。于是,我就用firebug來調(diào)試12306的各種HTTPS協(xié)議請求,最后經(jīng)過1個禮拜的努力,我終于把12306的登陸,查票,查常用聯(lián)系人,訂票所涉及的一系列HTTPS協(xié)議請求(包括地址,參數(shù))給記錄了下來,而且用JAVA寫了一個簡易的操作界面(用的AWT,因為比swing好看一點),又用C做了一個簡易的引導(dǎo)啟動封裝程序。因此,該軟件的來源純粹是出于我對12306搶
4、票軟件的興趣,對它原理的渴求,也希望能夠做出一個自己的搶票軟件,來證實自己的JAVA水平,希望它能夠幫助更多的程序員認識HTTP協(xié)議編程的重要性,設(shè)計出更加安全、可靠、防攻擊的項目來。1.2開發(fā)目標12306搶票軟件主要的目標就是能夠幫助更多的在外地打拼的奮斗者能夠及時的搶到回家的票。因此,軟件需要實現(xiàn)自動化,自動與12306服務(wù)器進行對接,以達到自動登錄,自動獲取常用聯(lián)系人,自動輪詢查票,自動訂票,以及錯誤處理等一系列用戶事先準備好的訂票流程腳本。另外,通過模仿瀏覽器對12306服務(wù)器的請求,希望能夠加強我們對HTTP,HTTPS協(xié)議編程的理解,提高重要性。因為WEB編程(.NET 、JSP
5、 、PHP等)究其根本也就是在服務(wù)器端通過服務(wù)器軟件(WEB服務(wù)器,比如Tomcat,apache,iis)將我們所編寫的動態(tài)文件(jsp、aspx、php等)轉(zhuǎn)換為HTML,然后再通過HTTP或者HTTPS協(xié)議傳輸?shù)娇蛻舳耍g覽器),而瀏覽器所處理的主要就是對HTML、CSS、JS等靜態(tài)文件的解析,渲染成頁面,讓用戶能夠清晰易懂的看到所呈現(xiàn)的頁面以及當用戶點擊按鈕時,將用戶的請求以HTTP或者HTTPS協(xié)議的方式發(fā)送到服務(wù)器。HTTP請求響應(yīng)流程如圖1所示。圖1 HTTP請求響應(yīng)流程2項目總體設(shè)計2.1技術(shù)框架設(shè)計該軟件是采用跨操作系統(tǒng)、面向?qū)ο缶幊痰腏AVA語言開發(fā)測試的,但與12306服
6、務(wù)器進行對接,用到了HTTPS協(xié)議編程,而且需要登錄認證,如果自己去實現(xiàn)這些功能顯然需要用到大量的時間,恰好apache已經(jīng)提供了一個非常出名的高效的、最新的、功能豐富的支持 HTTP(HTTPS) 協(xié)議的編程工具包httpclient。而本軟件需要監(jiān)控系統(tǒng)的運行情況,因此需要打印日志,于是,用到了LOG4J。至于UI,由于awt比swing更常用些,界面更友好,于是,在該軟件中,用到了awt來渲染界面,希望能有好的效果。至于最終開發(fā),采用的低耦合、高內(nèi)聚的分層概念設(shè)計-MVC。Awt相當于V(視圖),httpclient負責與12306服務(wù)器進行交互,log4j負責記錄相關(guān)日志。2.2功能模
7、塊設(shè)計該系統(tǒng)的功能結(jié)構(gòu)如圖2所示。12306搶票軟件基本功能擴展功能登陸查詢常用聯(lián)系人查詢余票訂票定時刷新查詢余票響鈴提醒腳本自動化圖2 功能結(jié)構(gòu)圖12306搶票軟件功能模塊主要包括兩大類:基本功能和擴展功能?;竟δ芤簿褪亲罨镜膯卧K,含有登陸、查詢常用聯(lián)系人、查詢余票、訂票 4 個功能,彼此之間相互獨立又相互關(guān)聯(lián)。擴展功能也就是利用基本功能進行擴展,比如定時刷新查詢余票,就是定時調(diào)用基本功能里面的查詢余票功能,再刷新界面;響鈴提醒則是在定時刷新查詢余票時,若發(fā)現(xiàn)有余票,則立即響鈴提示用戶。腳本自動化是最為高級的封裝,是軟件有多個模板引擎,用戶可以按照模板的要求編寫自己的訂票流程,從登陸
8、到查詢常用聯(lián)系人,再到訂票,以及錯誤處理,從而實現(xiàn)訂票的自動化,省事省力,操作方便。2.3功能接口介紹下面將從我對12306網(wǎng)站登錄、查詢聯(lián)系人、查票、訂票4個功能研究,來說明一下各個接口所用到的url以及參數(shù)的意義。2.3.1 登錄接口登陸接口所涉及到的URL,提交方式,參數(shù)意義,以及返回值如下。登陸接口URL: 登陸接口提交方式Method:POST。登陸接口參數(shù)意義: loginRand:隨機登錄碼,需要訪問URL: 才能獲取。 loginUser.user_name:用戶登錄名。 nameErrorFocus:登錄錯誤次數(shù),為空即可。 passwordErrorFocus:密碼錯誤次數(shù)
9、,為空即可。randCode:驗證碼,就是圖片,圖片URL: randErrorFocus:驗證碼錯誤次數(shù),為空即可。 refundFlag:返回標志,填寫Y即可。 user.password:用戶密碼。登陸接口返回值:可根據(jù)在返回值中是否包含“歡迎您登錄中國鐵路客戶服務(wù)中心網(wǎng)站”來判斷是否登錄成功。2.3.2 查詢聯(lián)系人接口查詢聯(lián)系人接口所涉及到的URL,提交方式,參數(shù)意義,頭信息以及返回值如下。查詢聯(lián)系人接口URL: 查詢聯(lián)系人接口提交方式Method: POST。查詢聯(lián)系人接口參數(shù)意義: pageIndex:獲取頁面,填0即可。 pageSize:每頁大小,填4即可。 passenger
10、_name:用戶姓名,填寫“請輸入漢字或拼音首字母”即可。查詢聯(lián)系人接口頭信息: Referer: User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22 X-Requested-With:XMLHttpRequest查詢聯(lián)系人接口返回值:返回值一個json對象,根據(jù)json插件(如GSON)進行解析即可。2.3.3 查詢余票接口查詢余票接口所涉及到的URL,提交方式,參數(shù)意義,頭信息以及返回值如下。查詢余票接口URL: 查
11、詢余票接口提交方式Method:GET。查詢余票接口參數(shù)意義: method:方法,填寫“queryLeftTicket”即可。 orderRequest.train_date:訂票日期。 orderRequest.from_station_telecode:起始站編碼。 orderRequest.to_station_telecode:終點站編碼。 orderRequest.train_no:車次。 trainPassType:填寫QB即可。 trainClass:車類型。 includeStudent:車類型,填寫00即可。 seatTypeAndNum:未知,填空即可。 orderReq
12、uest.start_time_str:填寫“00:00-24:00”即可。查詢余票接口頭信息: Referer: User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22 X-Requested-With:XMLHttpRequest查詢余票接口返回值:返回值是按照一定格式寫成的一個文本文檔,需要安裝自己的規(guī)則進行解析,即可看到所查詢的車次信息。2.3.4訂票接口訂票接口所涉及到的URL,提交方式,參數(shù)意義以及返回值如下。訂
13、票接口URL: 訂票接口提交方式Method: POST。訂票接口參數(shù)意義: station_train_code:車次編碼。 train_date:日期。 seattype_num:為空即可。 from_station_telecode:起始站編碼。 to_station_telecode:終點站編碼。 include_student:是否包含學生,填寫00即可。 from_station_telecode_name:起始站名字。 to_station_telecode_name:終點站名字。 round_train_date:車次日期。 round_start_time_str:填寫“00
14、:00-24:00”即可。 single_round_type:是否返程,填寫1即可。 train_pass_type:填寫QB即可。 train_class_arr:未知,填寫“QB#D#Z#T#K#QT#”即可。 start_time_str: 填寫“00:00-24:00”即可。 lishi:所需時間。 train_start_time:車次開始時間。 trainno4:車次編碼。 arrive_time:到達時間。 from_station_name:起始站名字。 to_station_name:抵達站名字。 from_station_no:車次開始編碼。 to_station_no:
15、車次抵達站編碼。 ypInfoDetail:信息。 mmStr:mmStr。 locationCode:locationCode。訂票接口返回值:根據(jù)返回值,需要進一步進行訂單確認,以下為訂單確認信息。確認訂單URL: =確認訂單提交方式Method: POST。確認訂單參數(shù)意義:和訂票參數(shù)值一樣,只是再次提交進行確認。確認訂單返回值:判斷返回值中是否包含errMsg:Y來判斷訂單是否成功。3項目功能描述3.1登陸模塊既可以按照用戶事先在配置文件里面設(shè)置的用戶名和密碼去登陸12306服務(wù)器,也可以輸入新的用戶名和密碼來登陸12306服務(wù)器。配置文件如圖3所示,登陸界面效果如圖4所示。圖3 配置
16、文件圖圖4 用戶登錄界面效果圖3.2查詢聯(lián)系人模塊 登陸之后,根據(jù)用戶的信息去12306服務(wù)器里面取回用戶之前在12306網(wǎng)站上保存的已有聯(lián)系人并顯示出來,聯(lián)系人信息界面如圖5所示。圖5 聯(lián)系人信息界面效果圖3.3查票模塊登陸之后,根據(jù)用戶輸入的查票日期,起始站,終點站來查詢12306服務(wù)器里余票信息,效果如圖6、圖7所示;還可以按照車次信息進行聯(lián)合查詢,比如T、K、D、G、Z、其他等,效果如圖8所示;除此之外,也可以只查某個車次信息,這時就只用輸入該車次信息,只查詢該車次的余票情況,效果如圖9、圖10所示。圖6按日期,始終站查詢界面效果圖圖7 按日期,始終站查詢結(jié)果界面效果圖圖8 按車的類型
17、查詢界面效果圖圖9按車次查詢界面效果圖圖10 按車次查詢結(jié)果界面效果圖3.4訂票模塊在用戶查詢完票后,根據(jù)用戶所選擇的車次,以及車票類型,座位類型以及所選擇的訂票人(姓名、證件類型、證件號碼、手機號)直接去12306服務(wù)器里面去提交請求,訂票成功,效果如圖11、圖12、圖13所示。圖11 提交訂票界面效果圖圖12 提交訂票人信息界面效果圖圖13 訂票成功提示界面效果圖3.5定時刷新查詢余票該模塊的功能主要是替代用戶不斷的點擊“查詢”來檢查此刻是否有余票。該模塊主要實現(xiàn)了當用戶鎖定某列車后(此刻已售完)按照用戶輸入(配置)好的刷新時間間隔來進行重復(fù)請求,刷新界面,不斷的查詢是否還有余票(別的用戶
18、退票了)。3.6響鈴提醒同3.5的介紹,當系統(tǒng)檢查到有余票后會立即響鈴,或按照用戶實現(xiàn)寫好的腳本進行下一步處理(比如訂票)。3.7腳本自動化此功能的主要目的是實現(xiàn)用戶訂票的自動化,從登陸,到查聯(lián)系人,到余票,再訂票的全過程。整個過程用戶可以按照系統(tǒng)提供的模板進行腳本編寫,比如在腳本里面寫清楚登陸12306服務(wù)器的用戶名,密碼,聯(lián)系人信息,以及預(yù)定的車次(可以同時定多個車次),則該軟件則會按照用戶的腳本與12306服務(wù)器進行交互,無需用戶額外干涉,從而實現(xiàn)訂票自動化,效果如圖14、圖15、圖16所示。圖14 設(shè)置自動訂票信息圖15 自動訂票界面效果圖圖16 自動訂票提示成功界面效果圖4項目技術(shù)創(chuàng)
19、新4.1技術(shù)創(chuàng)新及特點在該軟件里面用到了HTTPS協(xié)議編程,該技術(shù)算是比較重要的,望深層次說的話,里面有非對稱加密技術(shù)以及各種復(fù)雜的算法,還有數(shù)字簽名,如MD5等,另外因為12306需要登錄,因此也就有了session,cookie的保存,去實現(xiàn)這些技術(shù)是有一定的難度的,比較幸運的是apache基金會已經(jīng)提供了一個免費的封裝好的HTTP編程插件,可以實現(xiàn)session的保存,會話跟蹤。另外這個插件httpclient不僅支持HTTP,而且也支持HTTPS協(xié)議,因此我們來實現(xiàn)起來的話就不會那么復(fù)雜了,從而只需要將項目的重點放在業(yè)務(wù)邏輯上來,比如對數(shù)據(jù)的處理。另外一個完整的軟件,日志是少不了的,日
20、志可以幫助開發(fā)者實時了解軟件的運行情況,對以后的分析,匯總都很有必要性。因此,在該軟件里面,我們用到了LOG4J,它是apache的另外一個開放源代碼的日志插件,通過它,我們可以將日志信息輸出到控制點、文件等里面,而且效率非常好。在這里我主要想強調(diào)的是日志對應(yīng)一個軟件真的很重要,尤其是當做一個服務(wù)的時候,這個時候根本沒有界面,你無法知道服務(wù)的運行情況,這個時候只有日志能夠幫助我們來了解服務(wù)的運行情況,以及對一些方法進行跟蹤分析。4.2個人收獲與體會大學上了四年,最后我以12306搶票軟件來作為我的畢業(yè)答辯結(jié)束我的大學,我感覺很欣慰。說實話,2013年的春節(jié),我也在為買火車票而發(fā)愁,最后盯了幾天
21、的12306網(wǎng)站,才訂上了一張硬座回家,期間我也用到了一個搶票軟件,但后來就被禁用了。再加上那一段時間我的幾個朋友也經(jīng)常問我有沒有搶票軟件,那個時候我就在想,難道我就不能自己創(chuàng)造一個嗎。剛好,過完年后,有一段時間我閑了下來,特意去研究這東西,也算功夫不負有心人吧,最終我還是寫了出來,之后就不會再怕誰問我有沒有搶票軟件了,我會很自豪的說我有,而且是我自己的,哈哈。這個軟件利用到的最主要的技術(shù)就是HTTPS協(xié)議編程,從編寫這個軟件,我深刻的體會了WEB編程的原理,不管JAVA、.NET 、PHP ,其實,到最后都是在WEB服務(wù)器的幫助下把這些動態(tài)腳本文件轉(zhuǎn)化為HTML發(fā)送到客戶端瀏覽器,再有瀏覽器
22、進行解析渲染界面。從中,我深刻體會到了HTTP協(xié)議編程的重要性,之后再設(shè)計、開發(fā)WEB項目的時候,我會結(jié)合這次的開發(fā)經(jīng)驗,全面考慮,做到能夠有效防止一些“居心叵測”的程序員利用HTTP協(xié)議攻擊我的服務(wù)器(走非編程人員安排好的步驟,提交非編程人員設(shè)定的參數(shù),以及參數(shù)值,短時間內(nèi)大量請求一些比較耗時的操作,給服務(wù)器造成很大的壓力)。5附言因為12306網(wǎng)站在登陸和最后訂票時需要輸入驗證碼,而在2013年春節(jié)之前用Tesseract(圖片識別軟件) 就可以實現(xiàn)12306驗證碼的自動識別,準確率在90%之上,但是在改版之后,12306驗證碼在中間加上了一個斜杠,導(dǎo)致Tesseract識別效果很差,所以
23、,本項目暫時采用人工識別,即在需要驗證碼時,自動彈出窗口顯示圖片,用戶手工輸入。而在這個項目里面,在登陸和最后提交訂單時需輸入驗證碼,另外兩個功能(查詢余票和查詢常用聯(lián)系人)不需要輸入驗證碼。因為時間倉促,所以,我只是粗略實現(xiàn)了該軟件的一些核心功能,但是這些擴展功能都是很容易的,我感覺最重要的還是基本功能,因為,有了這些基本功能,我們可以按照自己的需求隨意擴展,所以沒有完善的還請指導(dǎo)老師見諒。附一 參考文獻1迪特爾(Deitel,H.M.) 迪特爾(Deitel,P.J.) 著,施平安,施惠瓊,柳賜佳 譯/ 2004-03-01 / 清華大學出版社 Java程序設(shè)計教程(第5版)/國外經(jīng)典教材
24、2(美)劉易斯,(美)切斯著/2009-09-01/清華大學出版社 Java軟件結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)(第3版)3龔水罡 等編著/ 2010-05-01 機械工業(yè)出版社 Java Web應(yīng)用開發(fā)實用教程4朱少民 主編 / 2007-01-01 / 清華大學出版社 軟件質(zhì)量保證和管理5李聯(lián)寧等編著/ 2011-08-01 / 清華大學出版社 網(wǎng)絡(luò)工程(高等學校計算機專業(yè)教材精選.網(wǎng)絡(luò)與通信技術(shù))6秦磊華,吳非,莫正坤編著/ 2011-02-01 / 清華大學出版社 計算機組成原理(計算機系列教材)7王森 著/ 2002-10-01 / 華中科技大學出版社 Java深度歷險(附光盤)8同濟大學數(shù)學系 編/ 2007-04-01 / 高等教育出版社 高等數(shù)學 同濟第六版9張硯秋,解又明主編/ 2006-08-01 / 上海外語教育 大學英語附二 項目源代碼視圖該系統(tǒng)的源代碼結(jié)構(gòu)如圖17所示。圖17 項目源代碼視圖說明:1、項目采用ant進行構(gòu)建,所以修改代碼后再封裝變的非常容易,改完代碼后直接build一下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年廣西公務(wù)員申論考試真題及答案-A卷
- 2025年滬教版高二數(shù)學上冊月考試卷
- 2025年人教新起點選修1歷史上冊月考試卷含答案
- 2025年粵教新版九年級地理上冊月考試卷
- 2025年人教五四新版七年級生物上冊階段測試試卷
- 2025年蘇人新版七年級生物上冊月考試卷含答案
- 2025年粵人版選擇性必修1語文上冊階段測試試卷
- 2025年北師大版八年級生物下冊月考試卷含答案
- 二零二五年度木門及木飾面定制化生產(chǎn)與安裝服務(wù)合同4篇
- 二零二五版親子閱讀活動組織服務(wù)合同4篇
- 江蘇省蘇州市2024-2025學年高三上學期1月期末生物試題(有答案)
- 銷售與銷售目標管理制度
- 人教版(2025新版)七年級下冊英語:寒假課內(nèi)預(yù)習重點知識默寫練習
- 2024年食品行業(yè)員工勞動合同標準文本
- 2025年第一次工地開工會議主要議程開工大吉模板
- 全屋整裝售后保修合同模板
- 高中生物學科學推理能力測試
- GB/T 44423-2024近紅外腦功能康復(fù)評估設(shè)備通用要求
- 2024-2030年中國減肥行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資研究報告
- 運動技能學習
- 2024年中考英語專項復(fù)習:傳統(tǒng)文化的魅力(閱讀理解+完型填空+書面表達)(含答案)
評論
0/150
提交評論