首页 > 其他分享 >12306节假日余票监控

12306节假日余票监控

时间:2023-08-06 19:33:50浏览次数:44  
标签:余票 请求 leftTicketDTO 12306 cookie station 节假日

前言

  航空、铁路、高速三种交通方式中要数铁路的性价比最高了,周边城市来回比高速通畅又比航空实惠,但是逢年过节探亲或旅游要是忘了提前买票,想着当天买当天走是不太现实的,这时候估计只剩下三更半夜出发的票或者站票,令人难受。

  于是我想着写个监控程序用于节假日来临提前通知我买票。

  对于 12306 的票务系统我是早有耳闻的,其高并发处理能力堪称业界标杆,反爬机制也是强悍,但我只是查个票,又不需要抢票,应该没什么难度吧?

  打开 PostMan 模拟 GET 请求,返回 “网络可能存在问题,请您重试一下!”,很好,我已经知道答案了。

探索

获取cookie

  F12 打开开发者工具发现,12306 的查询请求是需要 cookie 的,我就纳闷了,我又没登陆哪来的 cookie ?看来技术菜也是出行困难的原因之一,百度一番之后才知道原来访问一次 12306 会自动生成 cookie ,而后台校验的则是 cookie 里边的一个具有时效性的 RAIL_DEVICEID 。至于如何得到 RAIL_DEVICEID ,我参照网上大神写的相关文章进行复现,但并未成功,其文章发表日期距今已有一年之余,估计 12306 已经更新了算法(或者是我操作姿势不对?)。
参考资料:
https://www.cnblogs.com/snowdreams1006/p/12316951.html
https://www.cnblogs.com/snowdreams1006/p/12320945.html
https://www.cnblogs.com/snowdreams1006/p/12325203.html

  思来想去,我还是决定用最笨的也是开发效率最高的方式去获取 cookie ,祭出爬虫界元老级工具 —— Selenium

模拟查询

  请求地址(需带 cookie ): https://kyfw.12306.cn/otn/leftTicket/queryT
  请求方式:GET
  示例:https://kyfw.12306.cn/otn/leftTicket/queryT?leftTicketDTO.train_date=0000-00-00&leftTicketDTO.from_station=XXX&leftTicketDTO.to_station=XXX&purpose_codes=ADULT
  请求成功会返回一串带有余票信息的 Json。

请求参数 参数说明
leftTicketDTO.train_date 出发日期(格式:yyyy-mm-dd)
leftTicketDTO.from_station 出发站代码(查看代码
leftTicketDTO.to_station 到达站代码(查看代码
purpose_codes 乘客类型(成人:ADULT,学生:0X00)

获取正确请求地址

  查询余票的地址每天都会更换,所以在模拟查询的时候,如果请求的是旧的地址,那么会 302 跳转返回一个新的请求地址,前提是所带 cookie 是正确的。

响应参数 参数说明
c_url 新请求地址
c_name 固定值:CLeftTicketUrl
status 不知道是什么状态

流程

Snipaste_2022-05-02_18-07-20.webp

标签:余票,请求,leftTicketDTO,12306,cookie,station,节假日
From: https://www.cnblogs.com/1gcat/p/17609805.html

相关文章

  • Java项目12306售票系统
    Java项目12306售票系统 目录(一)系统功能概述3(二)系统功能模块结构31.前端功能32.WEB服务端43.数据库端4(三)系统界面设计51.登陆界面52.注册界面53.操作成功界面提示64.操作失败界面提示65.导航页76.购票页87.购买后打印电子车票页88.退票页与结果提示页89......
  • 自动登录12306
    ###自动登录12306```pythonimporttimefromselenium.webdriverimportActionChainsfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.chrome.optionsimportOptions#12306检测到咱们用了自动化测试软件,options=......
  • 新版Springboot3.0打造能落地的高并发仿12306售票系统
    第1章课程介绍与学习指南3节|22分钟本章主要对课程做整体介绍,其中包括:课程要解决的问题、课程特色和亮点、课程内容安排、学完大家的收获,以及在学习方法上提出的建议与指导。 第2章12306这个系统架构到底有多牛?8节|71分钟本章主要对课程为什么选择12306课程作为实战......
  • 新版Springboot3.0打造能落地的高并发仿12306售票系统
    第1章课程介绍与学习指南3节|22分钟本章主要对课程做整体介绍,其中包括:课程要解决的问题、课程特色和亮点、课程内容安排、学完大家的收获,以及在学习方法上提出的建议与指导。 第2章12306这个系统架构到底有多牛?8节|71分钟本章主要对课程为什么选择12306课程作为实战......
  • C# 接口获取所有节假日并存入库(批量循环对象操作)
    //每年的1月1号自动更新节假日表varallHolidayStr=BaseHelper.Get_HttpRequest("https://api.jiejiariapi.com/v1/holidays/"+DateTime.Now.ToString("yyyy"));if(allHolidayStr.IsNotNullOrEmpty()){......
  • python GUI+爬虫——12306抢票软件(1)
    使用python的GUI和爬虫等功能自己构造一个12306的抢票软件。该课程来自网易云课堂的撩课学院,付费课程。地址:网易云课堂搜索以下内容就可找到我跟着学,不一定最后能成功。先试试,想要成功的同学请看我该系列有没有真正实现,如果我没有实现,你可以直接放弃,不用再浪费时间了。简单描述一......
  • python GUI+爬虫——12306抢票软件(2)
    这部分主要是项目环境的配置,下图是概览1.基于项目的虚拟环境--pipenv1.1简介1.2安装pipinstallpipenv, 检查安装状态:pipenv--version 我的系统是mac,该项目使用Windows10开发更好1.3创建项目的虚拟环境,使用pycharm1.4创建完后修改安装源,修改位置为pipfile文件修改:来源修......
  • 免费API查询法定节假日
    API:https://timor.tech/api/holiday/year/2023请求结果示例{"code":0,"holiday":{"01-01":{"holiday":true,"name":"元旦","wa......
  • 万年历/节假日/日历API
    前言业务需求,需要判断节假日。简单来说,我们有一个节假日日历即可解决,但是市面上百度小米华为都有自己的日历但是就是没有API,我的需求是找一个稳定,高效,准确的日历以下调用均为CURL调用,官方支持SDK调用,考虑到成本,使用CURL我是为了加班费计算(节假日、补班)需要用到节假日的,有相同需......
  • 七、使用调度框架quartz,为12306系统增加定时调度功能
    为什么要有定时调度定时调度在企业级系统中非常重要(统计报表、功能补偿、不紧急的大批量任务)12306每天都需要生成15天后的车次数据本章内容集成quartz,比较SpringBoot自带定时任务喝quartz的区别使用控台来操作定时任务:新增、暂停、重启、删除项目中增加batch定时调度......