毕业答辩基于HTTPS协议的12306抢票软件设计与实现项目报告

上传人:无*** 文档编号:80375127 上传时间:2022-04-25 格式:DOC 页数:20 大小:377KB
收藏 版权申诉 举报 下载
毕业答辩基于HTTPS协议的12306抢票软件设计与实现项目报告_第1页
第1页 / 共20页
毕业答辩基于HTTPS协议的12306抢票软件设计与实现项目报告_第2页
第2页 / 共20页
毕业答辩基于HTTPS协议的12306抢票软件设计与实现项目报告_第3页
第3页 / 共20页
资源描述:

《毕业答辩基于HTTPS协议的12306抢票软件设计与实现项目报告》由会员分享,可在线阅读,更多相关《毕业答辩基于HTTPS协议的12306抢票软件设计与实现项目报告(20页珍藏版)》请在装配图网上搜索。

1、郑州大学毕业设计(项目报告)题 目: 基于HTTPS协议的12306抢票软件设计与实现 指导教师: 张宏涛 职称: 讲师 学生姓名: 魏超凡 学号: 20097740242 专 业: 计算机科学与技术(软件测试方向) 院(系): 软件学院 完成时间: 2013年5月24日 2013年 5 月 24 日 目录1项目开发目标11.1项目来源11.2开发目标12项目总体设计32.1技术框架设计32.2功能模块设计32.3功能接口介绍42.3.1 登录接口52.3.2 查询联系人接口52.3.3 查询余票接口62.3.4订票接口63项目功能描述83.1登陆模块83.2查询联系人模块93.3查票模块93

2、.4订票模块103.5定时刷新查询余票113.6响铃提醒113.7脚本自动化114项目技术创新134.1技术创新及特点134.2个人收获与体会135附言14附一 参考文献15附二 项目源代码视图16附三 项目部署物理视图17附四 软件使用说明181项目开发目标1.1项目来源2013年的春节,网上吵的最厉害的就是火车票订票软件了,有人说它是流氓软件,插队抢票,也有人很是赞好它,说用它订票更顺利了,不用一直呆在电脑面前,刷新页面查余票,再一步一步操作了,被网友热捧为“抢票神器”。这是大众的眼睛,但是作为程序员的我们,想的最多的莫过于它的原理了,甚至都想自己实现一个类似的软件。于是,我后来就特意用了

3、一段时间,去网上收集抢票的原理,果然,与我开始时想的不谋而合-HTTP协议编程。不过12306用的是加密的HTTPS协议,其实与HTTP协议差不多,说的简单一点,就只是加了一个非对称加密功能和签名而已。于是,我就用firebug来调试12306的各种HTTPS协议请求,最后经过1个礼拜的努力,我终于把12306的登陆,查票,查常用联系人,订票所涉及的一系列HTTPS协议请求(包括地址,参数)给记录了下来,而且用JAVA写了一个简易的操作界面(用的AWT,因为比swing好看一点),又用C做了一个简易的引导启动封装程序。因此,该软件的来源纯粹是出于我对12306抢票软件的兴趣,对它原理的渴求,也

4、希望能够做出一个自己的抢票软件,来证实自己的JAVA水平,希望它能够帮助更多的程序员认识HTTP协议编程的重要性,设计出更加安全、可靠、防攻击的项目来。1.2开发目标12306抢票软件主要的目标就是能够帮助更多的在外地打拼的奋斗者能够及时的抢到回家的票。因此,软件需要实现自动化,自动与12306服务器进行对接,以达到自动登录,自动获取常用联系人,自动轮询查票,自动订票,以及错误处理等一系列用户事先准备好的订票流程脚本。另外,通过模仿浏览器对12306服务器的请求,希望能够加强我们对HTTP,HTTPS协议编程的理解,提高重要性。因为WEB编程(.NET 、JSP 、PHP等)究其根本也就是在服

5、务器端通过服务器软件(WEB服务器,比如Tomcat,apache,iis)将我们所编写的动态文件(jsp、aspx、php等)转换为HTML,然后再通过HTTP或者HTTPS协议传输到客户端(浏览器),而浏览器所处理的主要就是对HTML、CSS、JS等静态文件的解析,渲染成页面,让用户能够清晰易懂的看到所呈现的页面以及当用户点击按钮时,将用户的请求以HTTP或者HTTPS协议的方式发送到服务器。HTTP请求响应流程如图1所示。图1 HTTP请求响应流程2项目总体设计2.1技术框架设计该软件是采用跨操作系统、面向对象编程的JAVA语言开发测试的,但与12306服务器进行对接,用到了HTTPS协

6、议编程,而且需要登录认证,如果自己去实现这些功能显然需要用到大量的时间,恰好apache已经提供了一个非常出名的高效的、最新的、功能丰富的支持 HTTP(HTTPS) 协议的编程工具包httpclient。而本软件需要监控系统的运行情况,因此需要打印日志,于是,用到了LOG4J。至于UI,由于awt比swing更常用些,界面更友好,于是,在该软件中,用到了awt来渲染界面,希望能有好的效果。至于最终开发,采用的低耦合、高内聚的分层概念设计-MVC。Awt相当于V(视图),httpclient负责与12306服务器进行交互,log4j负责记录相关日志。2.2功能模块设计该系统的功能结构如图2所示

7、。12306抢票软件基本功能扩展功能登陆查询常用联系人查询余票订票定时刷新查询余票响铃提醒脚本自动化图2 功能结构图12306抢票软件功能模块主要包括两大类:基本功能和扩展功能。基本功能也就是最基本的单元模块,含有登陆、查询常用联系人、查询余票、订票 4 个功能,彼此之间相互独立又相互关联。扩展功能也就是利用基本功能进行扩展,比如定时刷新查询余票,就是定时调用基本功能里面的查询余票功能,再刷新界面;响铃提醒则是在定时刷新查询余票时,若发现有余票,则立即响铃提示用户。脚本自动化是最为高级的封装,是软件有多个模板引擎,用户可以按照模板的要求编写自己的订票流程,从登陆到查询常用联系人,再到订票,以及

8、错误处理,从而实现订票的自动化,省事省力,操作方便。2.3功能接口介绍下面将从我对12306网站登录、查询联系人、查票、订票4个功能研究,来说明一下各个接口所用到的url以及参数的意义。2.3.1 登录接口登陆接口所涉及到的URL,提交方式,参数意义,以及返回值如下。登陆接口URL: 登陆接口提交方式Method:POST。登陆接口参数意义: loginRand:随机登录码,需要访问URL: loginUser.user_name:用户登录名。 nameErrorFocus:登录错误次数,为空即可。 passwordErrorFocus:密码错误次数,为空即可。randCode:验证码,就是图

9、片,图片URL: randErrorFocus:验证码错误次数,为空即可。 refundFlag:返回标志,填写Y即可。 user.password:用户密码。登陆接口返回值:可根据在返回值中是否包含“欢迎您登录中国铁路客户服务中心网站”来判断是否登录成功。2.3.2 查询联系人接口查询联系人接口所涉及到的URL,提交方式,参数意义,头信息以及返回值如下。查询联系人接口URL: 查询联系人接口提交方式Method: POST。查询联系人接口参数意义: pageIndex:获取页面,填0即可。 pageSize:每页大小,填4即可。 passenger_name:用户姓名,填写“请输入汉字或拼音

10、首字母”即可。查询联系人接口头信息: 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查询联系人接口返回值:返回值一个json对象,根据json插件(如GSON)进行解析即可。2.3.3 查询余票接口查询余票接口所涉及到的URL,提交方式,参数意义,头信息以及返回值如下。查询余票接口URL: 查询余票接口提交方式Method:GET。查询

11、余票接口参数意义: method:方法,填写“queryLeftTicket”即可。 orderRequest.train_date:订票日期。 orderRequest.from_station_telecode:起始站编码。 orderRequest.to_station_telecode:终点站编码。 orderRequest.train_no:车次。 trainPassType:填写QB即可。 trainClass:车类型。 includeStudent:车类型,填写00即可。 seatTypeAndNum:未知,填空即可。 orderRequest.start_time_str:填写

12、“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查询余票接口返回值:返回值是按照一定格式写成的一个文本文档,需要安装自己的规则进行解析,即可看到所查询的车次信息。2.3.4订票接口订票接口所涉及到的URL,提交方式,参数意义以及返回值如下。订票接口URL: 订票接口提交方式Method

13、: POST。订票接口参数意义: 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:00-24:00”即可。 single_r

14、ound_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:车次抵达站编码。 ypInfoDetail:

15、信息。 mmStr:mmStr。 locationCode:locationCode。订票接口返回值:根据返回值,需要进一步进行订单确认,以下为订单确认信息。确认订单URL: 确认订单提交方式Method: POST。确认订单参数意义:和订票参数值一样,只是再次提交进行确认。确认订单返回值:判断返回值中是否包含errMsg:Y来判断订单是否成功。3项目功能描述3.1登陆模块既可以按照用户事先在配置文件里面设置的用户名和密码去登陆12306服务器,也可以输入新的用户名和密码来登陆12306服务器。配置文件如图3所示,登陆界面效果如图4所示。图3 配置文件图图4 用户登录界面效果图3.2查询联系人

16、模块 登陆之后,根据用户的信息去12306服务器里面取回用户之前在12306网站上保存的已有联系人并显示出来,联系人信息界面如图5所示。图5 联系人信息界面效果图3.3查票模块登陆之后,根据用户输入的查票日期,起始站,终点站来查询12306服务器里余票信息,效果如图6、图7所示;还可以按照车次信息进行联合查询,比如T、K、D、G、Z、其他等,效果如图8所示;除此之外,也可以只查某个车次信息,这时就只用输入该车次信息,只查询该车次的余票情况,效果如图9、图10所示。图6按日期,始终站查询界面效果图图7 按日期,始终站查询结果界面效果图图8 按车的类型查询界面效果图图9按车次查询界面效果图图10

17、按车次查询结果界面效果图3.4订票模块在用户查询完票后,根据用户所选择的车次,以及车票类型,座位类型以及所选择的订票人(姓名、证件类型、证件号码、手机号)直接去12306服务器里面去提交请求,订票成功,效果如图11、图12、图13所示。图11 提交订票界面效果图图12 提交订票人信息界面效果图图13 订票成功提示界面效果图3.5定时刷新查询余票该模块的功能主要是替代用户不断的点击“查询”来检查此刻是否有余票。该模块主要实现了当用户锁定某列车后(此刻已售完)按照用户输入(配置)好的刷新时间间隔来进行重复请求,刷新界面,不断的查询是否还有余票(别的用户退票了)。3.6响铃提醒同3.5的介绍,当系统

18、检查到有余票后会立即响铃,或按照用户实现写好的脚本进行下一步处理(比如订票)。3.7脚本自动化此功能的主要目的是实现用户订票的自动化,从登陆,到查联系人,到余票,再订票的全过程。整个过程用户可以按照系统提供的模板进行脚本编写,比如在脚本里面写清楚登陆12306服务器的用户名,密码,联系人信息,以及预定的车次(可以同时定多个车次),则该软件则会按照用户的脚本与12306服务器进行交互,无需用户额外干涉,从而实现订票自动化,效果如图14、图15、图16所示。图14 设置自动订票信息图15 自动订票界面效果图图16 自动订票提示成功界面效果图4项目技术创新4.1技术创新及特点在该软件里面用到了HTT

19、PS协议编程,该技术算是比较重要的,望深层次说的话,里面有非对称加密技术以及各种复杂的算法,还有数字签名,如MD5等,另外因为12306需要登录,因此也就有了session,cookie的保存,去实现这些技术是有一定的难度的,比较幸运的是apache基金会已经提供了一个免费的封装好的HTTP编程插件,可以实现session的保存,会话跟踪。另外这个插件httpclient不仅支持HTTP,而且也支持HTTPS协议,因此我们来实现起来的话就不会那么复杂了,从而只需要将项目的重点放在业务逻辑上来,比如对数据的处理。另外一个完整的软件,日志是少不了的,日志可以帮助开发者实时了解软件的运行情况,对以后

20、的分析,汇总都很有必要性。因此,在该软件里面,我们用到了LOG4J,它是apache的另外一个开放源代码的日志插件,通过它,我们可以将日志信息输出到控制点、文件等里面,而且效率非常好。在这里我主要想强调的是日志对应一个软件真的很重要,尤其是当做一个服务的时候,这个时候根本没有界面,你无法知道服务的运行情况,这个时候只有日志能够帮助我们来了解服务的运行情况,以及对一些方法进行跟踪分析。4.2个人收获与体会大学上了四年,最后我以12306抢票软件来作为我的毕业答辩结束我的大学,我感觉很欣慰。说实话,2013年的春节,我也在为买火车票而发愁,最后盯了几天的12306网站,才订上了一张硬座回家,期间我

21、也用到了一个抢票软件,但后来就被禁用了。再加上那一段时间我的几个朋友也经常问我有没有抢票软件,那个时候我就在想,难道我就不能自己创造一个吗。刚好,过完年后,有一段时间我闲了下来,特意去研究这东西,也算功夫不负有心人吧,最终我还是写了出来,之后就不会再怕谁问我有没有抢票软件了,我会很自豪的说我有,而且是我自己的,哈哈。这个软件利用到的最主要的技术就是HTTPS协议编程,从编写这个软件,我深刻的体会了WEB编程的原理,不管JAVA、.NET 、PHP ,其实,到最后都是在WEB服务器的帮助下把这些动态脚本文件转化为HTML发送到客户端浏览器,再有浏览器进行解析渲染界面。从中,我深刻体会到了HTTP

22、协议编程的重要性,之后再设计、开发WEB项目的时候,我会结合这次的开发经验,全面考虑,做到能够有效防止一些“居心叵测”的程序员利用HTTP协议攻击我的服务器(走非编程人员安排好的步骤,提交非编程人员设定的参数,以及参数值,短时间内大量请求一些比较耗时的操作,给服务器造成很大的压力)。5附言因为12306网站在登陆和最后订票时需要输入验证码,而在2013年春节之前用Tesseract(图片识别软件) 就可以实现12306验证码的自动识别,准确率在90%之上,但是在改版之后,12306验证码在中间加上了一个斜杠,导致Tesseract识别效果很差,所以,本项目暂时采用人工识别,即在需要验证码时,自

23、动弹出窗口显示图片,用户手工输入。而在这个项目里面,在登陆和最后提交订单时需输入验证码,另外两个功能(查询余票和查询常用联系人)不需要输入验证码。因为时间仓促,所以,我只是粗略实现了该软件的一些核心功能,但是这些扩展功能都是很容易的,我感觉最重要的还是基本功能,因为,有了这些基本功能,我们可以按照自己的需求随意扩展,所以没有完善的还请指导老师见谅。附一 参考文献1迪特尔(Deitel,H.M.) 迪特尔(Deitel,P.J.) 著,施平安,施惠琼,柳赐佳 译/ 2004-03-01 / 清华大学出版社 Java程序设计教程(第5版)/国外经典教材2(美)刘易斯,(美)切斯著/2009-09-

24、01/清华大学出版社 Java软件结构与数据结构(第3版)3龚水罡 等编著/ 2010-05-01 机械工业出版社 Java Web应用开发实用教程4朱少民 主编 / 2007-01-01 / 清华大学出版社 软件质量保证和管理5李联宁等编著/ 2011-08-01 / 清华大学出版社 网络工程(高等学校计算机专业教材精选.网络与通信技术)6秦磊华,吴非,莫正坤编著/ 2011-02-01 / 清华大学出版社 计算机组成原理(计算机系列教材)7王森 著/ 2002-10-01 / 华中科技大学出版社 Java深度历险(附光盘)8同济大学数学系 编/ 2007-04-01 / 高等教育出版社 高

25、等数学 同济第六版9张砚秋,解又明主编/ 2006-08-01 / 上海外语教育 大学英语附二 项目源代码视图该系统的源代码结构如图17所示。图17 项目源代码视图说明:1、项目采用ant进行构建,所以修改代码后再封装变的非常容易,改完代码后直接build一下即可。2、构建时采用retroguard 进行代码混淆,使编译后的代码难以看懂。附三 项目部署物理视图该软件的最终部署结构图18所示。图18 软件部署图说明:start.exe是用c语言封装的一个启动外壳。bins文件夹其实就是jre1.6,主要是为没有安装jdk(jre)的电脑也能够启动,安装过jdk的电脑也可以 不需要此文件夹。con

26、f 里面放的是配置文件。lib 里面放的是一些项目依赖的jar包。logs里面是软件运行日志文件。附四 软件使用说明该软件的使用步骤如下:1、修改conf文件夹下的config.properties 把userName= 的“”换成你的12306网站的用户名,把userPwd= 的“”换成你的12306网站的密码。2、双击start.bat 或start.exe 启动程序 ,输入验证码即可登录系统。3、输入乘车日期,发站,到站,点击查询 即可查询车票信息 。4、在查询后点击车票右边的选中按钮,然后选择相关的坐席类别,车票类型 ,选择相应的用户,点击预计即可预定所选车票。5、登陆12306网站,

27、即可查看刚才已经预定的车票信息,然后请迅速支付即可。自动订票使用步骤:a、编辑conf文件夹下的autoOrderTicketConf.ini,换成你想订的车票信息。参数说明:ticket_date:乘车日期ticket_from:始发站ticket_to:终点站ticket_train_no:车次ticket_seat_type:车票座位类别ticket_person_name:乘车人姓名ticket_person_ID:乘车人身份证号ticket_person_phone:乘车人电话b、双击start.bat 或start.exe 启动程序 ,输入验证码登录系统c、点击选项菜单下面的自动订票,即可按autoOrderTicketConf.ini的配置进行自动订票,提示是否订票成功!18

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!