欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

程序员文章站 2022-04-16 09:11:33
项目结构 写完整个项目后觉得其实也很简单,无非是使用 Session 进行多次 Get 和 Post 请求,难点在于Post请求时使用的 Data 从何而来?我们先使用抓包工具(浏览器F12)完成一次12306平台订票之完整过程,对需要进行哪些网络请求心里有个大概印象。使用 Session 的主要原 ......
国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

项目结构

写完整个项目后觉得其实也很简单,无非是使用 session 进行多次 get 和 post 请求,难点在于post请求时使用的 data 从何而来?我们先使用抓包工具(浏览器f12)完成一次12306平台订票之完整过程,对需要进行哪些网络请求心里有个大概印象。使用 session 的主要原因是为了避免每次请求数据时都去考虑 cookies ,如此可能会方便很多。

进群:548377875  即可获取数十套pdf哦!记得是分开私信哦!

我们将整个订票过程中使用到的api 放在一个文件里,原因很简单:一旦某个接口地址改变了,我们只需在此文件里进行修改,无法在代码里到处查找修改,省时省力。我自己之前在写 ios应用时候也是采用这样的方式。

12306 api

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

常量

将项目里使用到的常量都集中在一个文件里,方便管理。特别需要注意的是座位类型不是固定的,我在写整个项目时发现有几个座位类型是变化的,比如硬座在我写本文的时候是 1 ,但是之前都是 a1 ,其他座位类型变化情况参见具体代码内容。

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

utility 工具类

通常项目中都会有很多共用方法,我们将这些方法抽离出来放在一个工具类文件里,如此可以减少冗余代码。

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

验证码图片

我们可以分别采用手动和打码平台自动方式对验证码进行验证,手动验证即把验证码图片分割成8个小图片,依次编号1-8,每个小图片上取固定的一个位置坐标,平台返回验证码图片后,用户手动输入正确验证码所在位置:

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

验证码图片分割

所谓的打码平台自动验证是指用户给打码平台传入一张验证码图片,平台通过码工去人工识别验证码 (码工有出错可能) ,平台再将其结果返回给用户,这个过程一般也就2-3秒时间。12306验证码是多个坐标拼接成的字符串,因此我们需要平台返回多个坐标字符串。

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

login类

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

在开发者模式打开的情况下刷新查询页面,发现多了很多请求。仔细查看每个请求都在做些什么操作?服务器又返回了什么?oh my gosh,竟然在刚打开查询页面的时候就请求到了。

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

电报码接口

我们把数据请求下来并加以保存,保存的原因是这些数据一般情况下都不会改变,请求一次,下次直接使用。

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

获取到车站电报码,接下来我们就可以查询余票了。细节部分将在代码里进行讲解。

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

查询结果

订票

这个过程也有很多请求,具体在代码里说明。

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

我们现在来订购一张28号上海到成都的二等座车票,在项目里是无法完成支付的,必须到12306官网进行支付!

国庆马上就来了!很多地方都没票了!吓的我马上用Python抢了几张

 

订单信息.png

我们可以将订票成功的结果以短信或者邮件的方式发送出去,提醒用户。

短信部分我已经写好了,在代码里就不展示了。