12306自动刷票下单-登录篇(一)
12306自动刷票下单-查票预定(二)

下单

进入下单界面了 
https://kyfw.12306.cn/otn/confirmPassenger/initDc 
 
还有一个请求https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs 

仔细看一下返回值,是我们常用联系人的信息,要下单肯定得选乘客信息嘛。这也是一个post请求,这个REPEAT_SUBMIT_TOKEN=8273d204078ad491f0face93d5c878b9很奇怪,记住,肯定是在它之上的请求中获取的, 
 
很幸运我们看它上面的那个请求initDc中就出现了,没错值是一样的,又搞定一个

选乘客票种提交

https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo 

看看参数,头晕吗?抹掉的是姓名身份证电话信息,除了REPEAT_SUBMIT_TOKEN和空参数,其他的一头雾水,你发现REPEAT_SUBMIT_TOKEN和上面的不一样了是吧,其实是一样的,因为我是写完一部分才进行下面的操作,时间长导致登录失效,所以提交的时候要求重新登录,这个REPEAT_SUBMIT_TOKEN参数就不一样了,也说明这个参数是每次都变化的。 
请求有发送的地方,这些参数也必然有填充的地方,向上找,不要放过任何一个请求,css和img请求就算了,然后我们找到了https://kyfw.12306.cn/otn/resources/merged/passengerInfo_js.js?scriptVersion=1.9053 
格式化一下,最好是找在线格式化JavaScript代码的,效果更好 
 
前两个参数搞定了,然后再看一下getpassengerTickets和getOldPassengers函数 

passengerTicketStr:O,0,1,xxx,1,xxxxx,xxxxx,N 
座位类型,0,票类型(成人/儿童),name,身份类型(身份证/军官证….),身份证,电话号码,保存状态 
跟上面这些一一对应一下,还有一个下划线,等你选择两个乘客的时候你就知道了 
oldPassengerStr自己分析一下吧

再看下面的请求https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount 

train_date时间不用解释了,train_no好像跟车次有关哦,对于未知的参数,我们一般先看前面请求的返回值,然后才是document和js请求,从查票请求的拆分结果来看2对应的就是这个,那么下面的车次信息也有了,seatType座位类型 

起始站编号和目的地编号我们也知道,train_location可以在查票信息中找到第15个,这里主要看一下leftTicket参数,同样的道理,在之前的请求中查找,我们发现initDc这个请求中搜到了这个值,key_check_isChange在下面用到(主要是看value值,这里为了截图重新截的图,所以value值不一样,正常的情况是一样的,不用担心) 

https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue 

看一下请求参数,所有参数在之前都找到了,包括key_check_isChange

下一个请求 
https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=1512295210042&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=56d3de8fe05b24a2daa92c0351df6cd2 

请求参数非常明显,random是随机参数,其他的不用再说了 
下一个请求 
https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=1512295213365&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=56d3de8fe05b24a2daa92c0351df6cd2 

EXM?跟上面的是同一个请求?请求确实一样,但是返回值不一样,看到了吗?orderId有值了,在下一个请求中用到了

https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue 

好了请求发完了,打开浏览器看一下订单吧,如果出现未支付订单,恭喜你搞定了 

 
补充一下我的执行结果,昨天订票次数用完了,最终执行结果忘了截图,今天重新运行一下,贴一下结果

番外:

  1. 有一些参数我在做的时候并没有详细去追根究底,如果你有兴趣可以看一看 
    https://kyfw.12306.cn/otn/resources/merged/queryLeftTicket_js.js?scriptVersion=1.9053 
     
    写博客的时候翻到了这个js,又在里面找到了一些参数的根源
  2. 我在写的时候碰到一个特别神奇的问题,给我搞蒙了参数问题可以看一看,千万不要犯我的这个错误
  3. 我在文章中提到的几个js请求,后面跟了scriptVersion参数,我发现这个更新等倒是挺频繁的,所以每次还是关注一下
  4. 我这个并没有做的特别详细,代码没有整理,没有异常处理,还有一个需求没有写就是判断哪一趟车的哪种票是不是有,能不能预订,毕竟我并不是要写一个非常健壮的抢票软件,就是练一练手,做做积累
  5. 高铁票是需要选座的,我只是订了普通的票。等以后再看吧,有需求再补上

总结

通过整篇文章想给大家提供一个思路,主要是对于请求的参数而言: 
- 首先你应该知道这个参数肯定是在当前请求之前出现的,至于是在哪个请求之后出现的这个就看情况了 
- 我们的参数无外乎就两种情况,一种是服务器发个客户端的,一种是客户端动态生成的。 
- 当我们在前面的请求中去查找参数的时候,我的查找顺序一般是先看xhr请求的返回值,因为这个数据是最纯净的,几乎没有垃圾数据。然后再从document请求中查找,这个里面一般是内嵌js数据,或者html数据,最后才从js请求中去分析数据,这是最麻烦的,也是现在很多反爬都钟情的一种方式。

我在文中很多地方都提到了这个过程,简单一笔带过,最后整体的把思路说一下,大家反过来再看一下文章,就会意会很多O(∩_∩)O~

12306自动刷票下单-下单(三)相关推荐

  1. 12306自动刷票下单-查票下单

    12306自动刷票下单-登录 前言 上篇写了12306登录,隔了快一个月了,才准备动手写下单篇,真的要非常感谢博客园的 Asimple朋友,如果不是看到你的留言,我几乎都忘了要写下篇了,这一点在简书上 ...

  2. 12306自动刷票下单-下单

    12306自动刷票下单-登录 12306自动刷票下单-查票预定 下单 进入下单界面了 https://kyfw.12306.cn/otn/confirmPassenger/initDc 还有一个请求h ...

  3. 12306自动刷票下单-登录篇

    12306网站推出图片验证码以后,对于抢票软件就提出了更高的要求,本篇并不涉及自动识别验证码登录(主要是博主能力所限),提供一个途径-打码平台,这个几乎是可以破解所有验证码了,本篇主要是分享一下123 ...

  4. 第三篇 12306自动刷票下单-下单

    下单 进入下单界面了  https://kyfw.12306.cn/otn/confirmPassenger/initDc    还有一个请求https://kyfw.12306.cn/otn/con ...

  5. 12306自动刷票下单-查票下单(二)

    前言 上篇写了12306登录,隔了快一个月了,才准备动手写下单篇,真的要非常感谢博客园的 Asimple朋友,如果不是看到你的留言,我几乎都忘了要写下篇了,这一点在简书上就不好,都没人看/(ㄒoㄒ)/ ...

  6. 第二篇 12306自动刷票下单-查票下单

    前言 上篇写了12306登录,隔了快一个月了,才准备动手写下单篇,真的要非常感谢博客园的 Asimple朋友,如果不是看到你的留言,我几乎都忘了要写下篇了,这一点在简书上就不好,都没人看/(ㄒoㄒ)/ ...

  7. 12306自动刷票下单-登录篇(一)

    12306网站推出图片验证码以后,对于抢票软件就提出了更高的要求,本篇并不涉及自动识别验证码登录(主要是博主能力所限),提供一个途径-打码平台,这个几乎是可以破解所有验证码了,本篇主要是分享一下123 ...

  8. python12306下单步骤_python+splinter实现12306网站刷票并自动购票流程

    通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站的 刷新频率(默认自动查询的刷新频率为5秒).对于学习splinte ...

  9. Python实例 一 12306抢票(二) 下单

    第二篇 刷票与下单 原文地址:http://www.tnblog.net/cz/article/details/241 解决"url":"/leftTicket/init ...

最新文章

  1. 常用的Linux服务器各项性能指标查看方法!
  2. 如何向Linux内核提交代码,如何往 Linux 内核社区提交代码
  3. LTE voice centric和data centric
  4. 盘点“逆市上涨”BZ第一季度回购亮点
  5. 新版Hadoop MapReduce-Yarn
  6. ios 视频知识补充---分解LFLiveKit
  7. 【Day06】请画出 Css 盒模型,基于盒模型的原理,说明相对定位、绝对定位、浮动实现样式是如何实现的?
  8. Sybase Adaptive Server Anywhere ISQL 8.0 绿色汉化版发布
  9. 远嫁的女人有没有偷偷哭过?有何经历?
  10. 1年sql数据库经验,却说数据模型一文不值?你还没懂数据仓库
  11. java调用python脚本_python脚本估算Java线程池参数配置
  12. LNMP详解(十五)——Nginx日志分析实战
  13. 一位H3CIE攻坚之旅
  14. Linux内核学习1——Linux内核编译安装
  15. 微信小程序 | 微信公众平台SpringBoot开发实例 │ 表情消息
  16. 电脑屏幕亮度随背景颜色变化
  17. 自动生成python接口文档_Django自动生成Swagger接口文档
  18. 任正非最新讲话:最好的防御就是进攻
  19. 球球大作战简易版代码(含简单人机)
  20. 计算机故障检修的常用流程及方法,常见品牌变频空调通讯故障通用检修流程与方法...

热门文章

  1. 什么是IP 欺骗以及如何防范?
  2. LCR表测电容怎么实现连续测试?ATECLOUD云测试平台帮您解决
  3. C++:stat函数
  4. 学习UEFI的一些步骤和资源
  5. mysql导出数据字典_Mysql中三个导出数据字典文档Word或者HTML的工具
  6. 2020-08-16
  7. 【lumerical】获取lumerical材料库中材料的有效折射率(波长范围内)
  8. 胜利祝酒词(1994)
  9. 天才程序员身价上亿却被说挫,6个月减90斤,逆袭成文艺范男神
  10. 资源分配图RAG的化简