一、基于HTTPS协议的12306抢票软件设计与实现--实现效果 
二、基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式

三、基于HTTPS协议的12306抢票软件设计与实现--垂直查询效果分享

哎,又过春节了,同志们又要抢票回家了,这票卖的可真快啊,瞬间的功夫就没有票了,一票难求啊!

这两天闲着没事,刚好又要抢春节的票了。就把原来写的抢票软件给打开试了一下,发现居然不能查票了。于是就又改了一下。

事实上是改了两下,一是:让原来的程序能够用起来(适应新接口),而是加上了水平DNS并发查询

以下就依次说下吧。

一、接口变更

事实上这次12306并没有大改。仅仅有一下几个接口改了。

1.1   登陆验证码

这个仅仅是去了个action的后缀(.do)。不改也没有问题。但怕以后出问题。就改了一下。
                  接口:https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew
                  參数:和之前一样。

1.2   查询车票

接口:https://kyfw.12306.cn/otn/leftTicket/queryT   (后面加了一个T)
                  參数未变。

1.3   查询日志接口

事实上这个接口算是新添加的吧,也就是在查询车票运行前先运行个查询日志接口,我实验了一下,发现不运行这个接口也行,只是查询车票的接口就会变的慢一点,所以我最后还是加上了,很easy。仅仅用发下请求就可以了。

接口:https://kyfw.12306.cn/otn/leftTicket/log
                  方法:GET
                  參数:和查询车票就可以參数一样。
                  返回值:不用管。

1.4   获取联系人接口

这个接口也没有大改,假设你的联系人少的话就不用管了。

由于我的联系人有两页,但依照之前我提供的接口的话仅仅能获取第一页的联系人,导致第二页的联系人不能正常获取。因此改动为例如以下:
                  接口:https://kyfw.12306.cn/otn/passengers/query
                  方法:GET 或 POST
                  參数:pageIndex (第几页)
                  pageSize  (每页多少条记录)
                  返回值:json格式,略微解析下就能够了,字段名字没有变。

二、水平DNS并发查询

事实上这次改动最大的地方算是加了个水平DNS查询吧。由于12306是全球都能够訪问的站点,须要提供高并发等功能。因此在各地都提供了多个server,通过DNS解析,不同地区的用户訪问距离本地近期的server来进行解析,通过这样12306来分解各地的高并发请求。但这种话就造成了另外一个问题,就是不同地区的用户在同一抢票时间抢同样的火车票。但看到的页面数据会有区别。有的能够看到剩余车票。而有的看不到,这是由于他们訪问的不是同一个12306server。不同的缓存导致的。

水平DNS查询的功能简单来说就是能列出12306各地server同样车票的剩余情况,看下图便知。

上图显示的就是全球各地12306server同一时间同样车票的显示情况(我这仅仅是演示,要看到区别,能够在放票的那段时间。能够看到不同的server会显示不同的结果)。

事实上实现也很easy。首先通过DNS查询工具,查询出12306站点(kyfw.12306.cn)相应的各地的serverip地址。然后每一个地区都分别请求同样的车次,然后再table里面列举出来就可以,简单吧。

这个功能是很有用的,能够间接的反应出各地server的反应快慢。最后假如某个地区的车次信息显示有票,那么仅仅须要把程序当前DNS改动一下,让kyfw.12306.cn域名相应到那个IP地址就可以,然后就能够訪问那个IP地址进行异地server订票。

最后再说下,在我实验水平DNS查询的时候,发现假设选择了异地server进行订票,会发现你须要在异地server上又一次登录下才干够订票(能够说明12306在全国各地的应用server并没有共享session)。

四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享的更多相关文章

  1. 12306抢票带来的启示:看我如何用Go实现百万QPS的秒杀系统

    本文为开源实验性工程:“github.com/GuoZhaoran/spikeSystem”的配套文章,原作者:“绘你一世倾城”,现为:猎豹移动php开发工程师,感谢原作者的技术分享. 1.引言 Go ...

  2. 12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(上)

    郑重声明: 本文仅供学习使用,禁止用于非法用途,否则后果自负,如有侵权,烦请告知删除,谢谢合作! 开篇明义 本文针对自主开发的抢票脚本在抢票过程中常常遇到的请求无效等问题,简单分析了 12306 网站 ...

  3. python3.7之12306抢票脚本实现

    悲催的12306,彻底沦为各路抢票软件的服务提供方.元旦伊始,纯粹12306官网及APP抢票,愈一周的时间,仅到手一张凌晨3:55回家的站票.为远离脑残,无奈选择抢票软件,预购年后返沪车票.BTW,研 ...

  4. Python 实现的 12306抢票脚本

    Python12306抢票脚本 本脚本使用一个类来实现所有代码,大体上分为以下几个模块及其步骤:- 初始化对象属性(在抢票前进行的属性初始化,包括初始化浏览器模拟对象,个人信息等).- 建立模拟浏览器 ...

  5. 「今日 GitHub 趋势」让全世界程序员体会中国的 12306 抢票狂潮

    [2018年1月7日 GitHub 趋势] No.1:yyx990803 / build-your-own-mint 单日 714 星 使用 Plaid,Google 表格和 CircleCI 构建您 ...

  6. LoadRunner系列之—-04 录制基于https协议的脚本

    实际性能测试过程中,有些需录制脚本的页面或接口是基于https协议的,按原来方法录制脚本,录完了脚本是空的.为解决这个问题,第一步了解https协议的具体实现,这块网上资料很多,可参考页面下方参考资料 ...

  7. 12306抢票算法居然被曝光了!!!居然是redis实现的

    导读 相信大家应该都有抢火车票的经验,每年年底,这都是一场盛宴.然而你有没有想过抢火车票这个算法是怎么实现的呢? 应该没有吧,咱们今天就来一一探讨.其实并没有你想的那么难 bitmap与位运算 red ...

  8. 专业的抢票软件 12306bypass

    专业的抢票软件 https://www.12306bypass.com/

  9. 马后炮之12306抢票工具(四)--抢票Demo,2014年1月9日终结版

    时隔一年多,终于朋友的忽悠下吧抢票Demo的最后一步完善了,与2014年1月9日成功生成车票. Demo仅经过自己测试,并未在高峰期进行测试,代码质量很差,因为赶工,套用去年模板并未使用设计模式. 代 ...

随机推荐

  1. H3C交换机DHCP Server配置的六个方面

    H3C交换机DHCP Server配置的六个方面 在交换机上面配置DHCP内容是司空见惯的了.那么这里我们就讲解一下H3C交换机DHCP Server配置内容.之后的文章中,我们还对针对其他方面的配置 ...

  2. Linux下JDK Tomcat MySQL基本环境搭建

    1. 安装JDK wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1 ...

  3. 数据库表结构导出sql语句

    在“对象资源管理器”中找到要导出的表,选中该表并单击右键,“编写表脚本为(S)”/“CREATE到(C)”/“新查询编辑器窗口”即可查看该表的建表语句,Ctrl+S保存为sql脚本文件

  4. 洛谷P4413 [COCI2006-2007#2] R2(可持久化平衡树维护NTT)

    题意翻译 设S=(R1+R2)/2,给定R1与S (-1000<=R1,S<=1000)(−1000<=R1,S<=1000) ,求R2. 感谢@Xeonacid 提供的翻译 ...

  5. Vue.js 2 vs Vue.js 3的实现 – 云栖社区

    Vue.js 2 vs Vue.js 3的实现 – 云栖社区 vue.js核心团队已经讨论过将在Vue3实现的变化.虽然API不会改变,但是数据响应机制(译者注:对数据改变的监听和通知)发生了变化.这 ...

  6. Java程序连接各种数据库的driver和url形式

    1.Oracle数据库 Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = & ...

  7. jQueryDOM操作模块(二)

    DOM模块 1.优化框架结构 目标:在实现功能基础上优化代码使得框架更简单易用 1.1 简化存储DOM元素的容器 - elements 目标:使用 this 作为容器 1.1.1 使用 element ...

  8. React 学习笔记:1-react 入门

    接下来的项目里有用到react,最近一段时间主要关注于react 的学习.大部门都是网上的资料,学习整理并记录,加深记忆. React 是Facebook推出的用来构建用户界面的JavaScript库 ...

  9. JsonPluginsUtil

    package utils; import java.lang.reflect.Field;import java.text.SimpleDateFormat;import java.util.Arr ...

  10. 让SSL证书给服务器上一把“锁”

    近期,用户数据泄露的新闻接二连三地被曝光.先有京东金融App涉嫌自动获取用户手机中的敏感照片,随后CNET又爆出中国深圳的一家人工智能公司深网视界对于其人脸识别数据库没有密码保护,导致250万用户信息 ...