从零实现一款12306抢票软件(一)

本文从零开始教你如何实现12306抢票软件,主要通过模拟登录和发送HTTP请求来购票。介绍了分析12306购票过程的方法,并以查票接口为例,展示了如何获取站点信息。强调技术仅供学习,不可用于非法目的,同时指出12306的URL会频繁变动,理解原理是关键。
摘要由CSDN通过智能技术生成

写在前面的话

每年逢年过节,一票难求读者肯定不陌生。这篇文章,我们带领读者从零实现一款12306刷票软件,其核心原理还是通过发送http请求模拟登录12306网站的购票的过程,最后买到票。

关于http请求的格式和如何组装http数据包给服务器发送请求,我们在上一篇文章《从零实现一个http服务器》中已经详细介绍过了,如果还不明白的朋友可以去那篇文章看下。

郑重申明一下:这里介绍的技术仅供用于学习,不可用于恶意攻击12306服务器,请勿滥用本文介绍的技术。对12306服务器造成的任何损失,后果自负。

当然,由于12306服务器用户量巨大,为了防止黄牛和其他一些非法攻击者,12306的很多url和在购票过程中各个步骤的协议细节经常发生变化。所以,本文中介绍的一些具体的url,可能在你看到本文时已经失效。但是这并没有关系,只要你掌握了本文中介绍的分析方法,您就可以灵活地修改您的代码,以适应最新的12306服务器的要求。举个例子,如12306的查票接口目前的url是:https://kyfw.12306.cn/otn/leftTicket/query,可能过几天就变成了https://kyfw.12306.cn/otn/leftTicket/queryX,再过几天又可能变成https://kyfw.12306.cn/otn/leftTicket/queryY,然后一个星期后又可能变成https://kyfw.12306.cn/otn/leftTicket/queryZ,这些笔者都见过。所以,重在原理的学习,掌握了原理,不管12306的相关url变成什么样,都可以以不变应万变。哎,12306在与黄牛斗争的路上越走越远啊。T_T

本文将使用以下工具来分析12306购票的过程,然后使用C++语言,模拟相关的过程,最终购票。

1、Chrome浏览器(其他的浏览器也可以,都有类似的界面,如Chrome,装了httpwatch的IE浏览器等)

2、一个可以登录12306网址并且可以购票的12306账号

3. Visual Studio(版本随意,我这里用的是VS 2013)

一、查票与站点信息接口

之所以先分析这个接口,是因为查票不需要用户登录的,相对来说最简单。我们在Chrome浏览器中打开12306余票查询页面,网址是:https://kyfw.12306.cn/otn/leftTicket/init,如下图所示:

然后在页面中右键菜单中选择【检查】菜单,打开后,选择【网络】选项卡。如下图所示:

打开后页面变成二分窗口了,左侧是正常的网页页面,右侧是浏览器自带的控制台,当我们在左侧页面中进行操作后,右侧会显示我们浏览器发送的各种http请求和应答。我们这里随便查一个票吧,如查2018年5月20日从上海到北京的票,点击查询后,我们发现右侧是这样的:

通过图中列表的type值是xhr,我们可以得出这是一个ajax请求(ajax是浏览器原生支持的一种异步请求,详情请自行百度)。我们选择这个请求,你能看到这个请求的细节——请求和响应结果:

在reponse中,我们可以看到我们的这个http的去除http头的响应结果:

这是一个json格式,我们找个json格式化工具,把这个json格式化后贴出来给大家看一下,其实您后面会发现12306的http请求结果中与购票相关的数据基本上都是json格式。这里的json如下:

{
	"validateMessagesShowId": "_validatorMessage",
	"status": true,
	"httpstatus": 200,
	"data": {
		"result": ["null|23:00-06:00系统维护时间|5l0000G10270|G102|AOH|VNP|AOH|VNP|06:26|12:29|06:03|IS_TIME_NOT_BUY|RLVVIt093U2EZuy2NE+VQyRloXyqTzFp6YyNk6J52QcHEA01|20180520|3|HZ|01|11|1|0|||||||||||1|有|13||O090M0|O9M|0", "null|2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值