`
xautlx
  • 浏览: 12952 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Java Swing C/S版本12306订票助手

阅读更多

Java Swing C/S版本12306订票助手

https://github.com/xautlx/12306-hunter

http://git.oschina.net/xautlx/hunter-12306

本程序完全开放源代码,仅作为技术学习研究交流之用,不得用于任何商业用途;作者不承担任何由此带来的直接或间接责任

  • 特别说明: 整个程序除了速度和效率高一些外,和浏览器订票请求没有本质区别,因此如果12306服务器做了任何调整,程序随时可能失效,请自行酌情使用。

  • 强烈建议: “不要把所有鸡蛋放到一个篮子”,可注册多个账号,一些用于浏览器插件或常规订票,一些用此程序刷票,这样相对更保险。

项目说明

基于HttpClient、Multiple Thread、File I/O等主要技术的Java Swing桌面应用,至于说用途就不多说了,你懂的; 虽然说功能上没有办法和目前类似主流的浏览器插件相提并论,但是由于采用直接的HTTP请求模式,我相信效率上一定会更高。 ** 天下武功,唯快不破 **

  • 直接以HTTP GET/POST发起最小数量必须的订票请求,相比浏览器插件方式更加快速高效;

  • 基于多线程多账号登录并发刷票,更高的订票成功率;

  • 基于文件记录最后输入的订票数据,提高交互友好体验;

  • 该程序只核心关注以最高效快速提交订票请求,不支持诸如自动登录、识别验证码、支付等其他高级功能!

整个程序参考了一个名为mygod-go-home的项目,其中还包括一些自动化识别验证码的尝试,在此对于作者的开源共享表示感谢,但是不知道什么原因目前已经很久没有更新发布了。 原来程序可能是考虑太多太全整个代码结构看起来比较费劲,把其中一些请求参数定义组装和响应解析等体力代码引用过来,然后加入自己的想法设计从而有了这个程序工程。

题外话: 对于这样每到逢年过节炒的火热的订票助手,各大浏览器的插件以及12306之间的恩怨纠葛、道德讨论等我觉得已经够多了,我只能说这就是一个在无聊以及无奈的环境下的产物。 我们还是以技术的角度去看待它,自从有了12306.cn,作为标准程序员闲的没事就有了新的乐趣练练手,既然拥有这样的技术,并且能让技能为我所用,何乐而不为呢。说不定哪天就被XXX封杀潜规则了,谁知道呢,权当娱乐而已!

用法说明

  • 程序下载获取:

简单方式是直接点击页面 (https://github.com/xautlx/12306-hunter) 右下方的“Download ZIP”,以zip压缩文件方式下载整个项目工程,然后解压缩到本地任何目录即可。

当然如果你熟悉GitHub的使用或希望随时update最新代码或修改提交pull request,可通过GitHub支持的git、svn等多种方式check out整个工程代码和执行文件。

程序采用Java语言编写实现,因此需要安装Java运行环境。理论上Java 5,6,7 版本皆可运行。

  • 直接运行程序:

如果系统已安装过Java运行环境,则直接执行startup.bat即可。

当然如果不懂Java也没关系,请自行访问Oracle下载安装Java运行环境:

http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html

选择“Accept License Agreement”,然后点击相应系统版本下载安装即可(可能需要重启系统),之后执行startup.bat即可。

  • 开发模式运行:

本项目本身是一个完整的Eclipse工程,基本Maven依赖管理,熟悉对应开发过程及有兴趣开发调试程序的,可在导入开发工具,以Java应用程序方式执行TicketMainFrame即可。

Swing界面开发采用Eclipse WindowBuilder自动生成框架代码,可自行安装插件以可视化模式查看设计实现。

界面截图

Index View

Submit View

功能说明

如果有任何问题或建议反馈,请到 https://github.com/xautlx/12306-hunter/issues 提交Issue;

对于程序本身的不足或下面提到的优化点,欢迎有兴趣的朋友本着交流学习为目的的代码改进优化并直接提交Pull Request。

参考上述截图,对于UI界面功能从上至下大致说明如下:

目前程序除了基于乘车起始站对车次做基本校验外,其余基本没有更仔细严格的校验,使用时请自行按照官方网站给的有效数据格式填写,也欢迎补充提交完善校验逻辑代码共同完善程序。

TODD:考虑加入配置文件概念,如可以定制化请求间隔时间(目前代码层面固定的0.5秒)等

  • 数据记住功能: 程序在关闭时自动记录最后输入的相关数据免去下次打开程序重复输入,不包括数据:密码、验证码、乘车日期(每次打开始终自动初始化为20天预售期)、 其他动态日志等信息

  • 起站、到站: 请输入精确的乘车站名称,如北京西(TODO:支持中文或拼音输入提示)

  • 乘车日期: 每次打开始终自动初始化为20天预售期,可自行修改为预售期内的有效日期,请保持默认的日期格式(TODO:日历组件输入支持;校验输入日期在预售期内)

  • 备选日期: 主要用于刷“退票”的时候,碰到他人退票自动快速下单,按照顺序优先级填入逗号分隔的乘车“日”字符串,程序自动换算日期属于本月还是下月; 如当前是10号,填写2,1,29,28则表示按照下月2号,1号,本月29号,28号的顺序不断循环尝试订票,直到其中任何一次成功

  • 用户及车次设置: 为了提高成功率,可以添加多个注册的12306账号(点击每个行项前面的加减号),每个登录账号各启动一个线程并发订票,各登录账号可根据所需指定相同订票车次或不同车次组合。

    每个登录账号可从【左至右优先级】设定5个【车次和席别】(一个车次可以以不同席别添加多次) , 程序订票规原则是尽量先定优先级高的票,实在没票了才委屈求全定后续优先级低的票; 简单说就是程序不是按照优先级一个个顺序循环尝试订票,而是始终先不断尝试订优先级高的票,直到系统返回已经没票了才会转入下一车次席别。

    因此请合理设置各账号车次席别顺序和组合方式,因为各登录账号订票线程互相独立运行,各自都随时有可能按照上述的订票原则订到指定优先级的车次和席别的票,设定不合理就会导致优先抢到“不抢手”的票了,再想回头想抢中意的票估计就来不及了。 当然也不用考虑太复杂,每个登录账号和车次席别自动发现有票时,会自动弹出下单验证码输入对话框,如果感觉不是自己中意的票可以点击取消即可从而自动再继续尝试刷票,避免不必要的误伤了。

  • 账号、密码、验证码: 没什么好说的,顺序输入即可,验证码会自动转为大写并且在满4位后自动触发点击登录请求;只有登录成功的用户行项才会启动刷票线程。验证码图片看不清可以点击刷新。下方是每个登录用户的Cookie数据,显示参考不用太关注。 (TODO:考虑加一个登录状态的守护线程,防止由于登录后长时间没有发起请求导致登录失效)

  • 车次、席别: 一个登录账号可以分别输入多个车次(包括字面前缀的完整车次)及对应席别,从左到右优先级,规则见上述说明 ;具体车次代码和有效的席别请自行通过12306网站查询。(TODO:可考虑加入车次对应席别有效性的校验)

  • 乘车人: 没啥好说的,按照网站类似的填写相关信息即可,可点击加减号增减多个乘车人,左侧有个勾选用以确定本次订票乘车人(用于方便保存维护多个乘车人供以后使用,但是只勾选本次必要的乘车人),建议从12036常用联系人拷贝相关数据,避免手工输入错误(TODO:添加从12306获取乘车人信息及有效性校验)

  • 开始自动刷票: 基于“已成功登录的账号”和“已勾选的乘车人”,及相关填写信息启动刷票线程,期间刷到票后后自动弹出顶层窗口显示相关车次信息和输入验证码,确认是需要的票的赶快输入验证码(输入4位自动提交)提交下单,如果验证码错误会再次弹出窗口输入;如果不是想要的车票则点击取消即可。 任何一个账号线程提示订票成功后会当前线程自动终止,但是其他账号线程还会继续,可以点击“停止自动刷票”结束所有刷票线程。

  • 停止自动刷票: 强制结束所有刷票线程。

友情推荐

  • S2JH - 作者项目:基于SSH的企业Web应用开发框架
  • Nutch Htmlunit Plugin - 作者项目:基于Htmlunit扩展的Nutch支持AJAX页面抓取插件
分享到:
评论

相关推荐

    JAVA SWing 实现C/S模式的数据库编程及WebServices 调用实现

    在本项目"JAVA SWing 实现C/S模式的数据库编程及WebServices 调用实现"中,开发者可能已经创建了一个Java Swing应用程序,该应用具有用户界面,允许用户进行数据操作。这些操作可能包括添加、删除、更新数据库记录。...

    c/s结构的订票系统

    总的来说,“c/s结构的订票系统”是一个典型的分布式应用程序,结合了Java Swing的GUI设计与Java网络编程技术,实现了用户友好的订票流程和高效的服务器处理能力。开发者需要具备扎实的Java基础知识,理解C/S架构的...

    KTV.点歌系统 javaswing C/S 架构

    本文将详细介绍一个采用JavaSwing框架构建的C/S(Client/Server)架构的点歌系统,包括系统设计、核心功能以及实现流程。 首先,JavaSwing是Java平台上用于构建桌面应用的重要工具,提供了丰富的组件库,使得开发者...

    Java swing实现简单的C/S聊天及文件传输系统

    在这个项目中,"Java swing实现简单的C/S聊天及文件传输系统"是利用Swing构建一个客户端/服务器(Client/Server)架构的聊天和文件传输应用。这个系统允许用户通过网络进行文本聊天并交换文件。以下是关于这个项目的...

    java课程设计c/s结构的图书管理系统

    5. **GUI设计**:作为C/S架构的一部分,客户端可能包含了图形用户界面(GUI),使用Java Swing或JavaFX库来创建,用于提供用户友好的交互体验。 6. **网络编程**:在C/S架构中,客户端和服务器之间的通信涉及到网络...

    12306 抢票助手 - Java版

    【12306 抢票助手 - Java版】是一个基于Java编程语言开发的应用程序,设计用于帮助用户更高效地在12306中国铁路官网进行火车票预订。Java是一种广泛使用的跨平台编程语言,以其“一次编写,到处运行”的特性著称,...

    swing_C-S图书销售管理系统GUI(JAVA源码+数据库sql+论文)

    《Swing_C-S图书销售管理系统GUI》是一款基于Java编程语言开发的客户端-服务器(C/S)架构的应用程序,主要用于图书销售管理。此系统包含了完整的JAVA源码,方便开发者进行学习和二次开发,同时附带了数据库SQL脚本...

    基于Java C/S模式的简单学生管理系统

    【基于Java C/S模式的简单学生管理系统】是一个利用Java编程语言实现的客户端/服务器(Client/Server,C/S)架构的软件应用,主要用于演示学生信息的管理。由于它并未包含管理员功能,所以其功能可能相对基础,适用...

    java 计算器 c/s

    ### Java C/S模式计算器知识点详解 #### 一、C/S架构概述 C/S(Client/Server,客户端/服务器)架构是一种分布式应用系统架构,其中客户端(Client)负责用户交互和展示,而服务器端(Server)负责数据处理和存储...

    Java实现12306登录和查票功能

    Java实现的登录和查票功能,有完整的JavaSwing实现的界面,目前能够实现登录和查票以及获取联系人功能,通过手动获取RAIL_DEVICEID和RAIL_EXPIRATION两个参数解决登录时提示重定向到...

    小区物业管理系统(Java(C/S))

    1.管理员管理(添加管理员、修改密码);2.系统设置(设置工具栏);3.业主信息管理(增删改查业主信息);4.物业信息管理(投诉管理、收费管理、保修管理);5.房屋信息管理(增删改查房屋信息);

    java/swing/j2se编写开发的酒店管理系统

    【Java/Swing/J2SE 酒店管理系统详解】 Java Swing 是 Java 平台上的一个图形用户界面(GUI)工具包,它属于 J2SE(Java 2 Platform, Standard Edition)的一部分,用于创建桌面应用程序。在Java/Swing/J2SE框架下...

    基于ApacheNutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件nutch-htmlunit.zip

    Nutch Htmlunit Plugin 重要说明: ... 12306 Hunter - (功能已失效不可用,不过还可以当作Swing开发样列参考只用)Java Swing C/S版本12306订票助手,用处你懂的 标签:nutch

    java的c/s开发实例

    Java提供了丰富的类库,包括Swing、JavaFX等用于构建图形用户界面(GUI)的工具,非常适合开发C/S应用的客户端部分。在本实例中,开发者可能使用了这些工具来创建用户友好的界面,供用户进行数据查询、添加、修改和...

    用swing做b/s结构的web开发小内幕

    然而,"用Swing做B/S结构的Web开发"这个主题可能让人有些困惑,因为Swing通常与C/S(客户端/服务器)架构关联,而不是B/S(浏览器/服务器)架构。实际上,这里的描述可能是指利用Swing来模拟或辅助Web应用的开发过程...

    基于Java的C/S网络应用程序开发.pdf

    本资源摘要信息中,我们将详细介绍基于Java的C/S网络应用程序开发过程,包括客户端和服务器端的设计、数据库设计、Socket网络通信技术、Java多线程技术、Swing技术等。 一、C/S网络应用程序开发模型 C/S网络应用...

    基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)

    本项目是一套基于java Swing 和 mysql实现的飞机订票系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用...

    java资产管理系统C/S

    【Java资产管理系统C/S】是一种基于Java编程语言的客户端/服务器(C/S)架构的应用程序,主要用于企业或组织内部的资产管理。这样的系统旨在提高资产利用率,降低运营成本,并确保合规性。在JAVA SWING图形界面开发...

    基于Java Swing的图书管理系统-版本二(csdn)————程序.pdf

    【基于Java Swing的图书管理系统-版本二】是一个利用Java编程语言和Swing GUI库开发的图书管理应用程序。这个系统提供了一系列功能,旨在帮助用户高效地管理和操作图书信息。以下是该系统的详细知识点: 1. **图书...

    java swing漂亮界面(超酷) javaswing教程

    Java Swing 是Java编程语言中用于构建桌面应用程序用户界面的一个库,它是Java Foundation Classes (JFC) 的一部分。Swing 提供了一系列组件,如按钮、文本框、菜单等,用于创建功能丰富的图形用户界面(GUI)。在...

Global site tag (gtag.js) - Google Analytics