了解12306购票流程

转自freebuf

1,2,3,零咯,几秒钟心仪的票票就被人抢完了,也不知道是不是人手一部传说中的抢票大杀器,针对上面的情况,所以写了下面的内容,如果分析不到位,欢迎大伙指正。
细节如下:打开登录口
  1. https://dynamic.12306.cn/otsweb/loginAction.do?method=init (网页版入口)
  2. https://dynamic.12306.cn/otsweb/main.jsp (核心入口<------网页版入口)
复制代码
通常,从12306页面上打开登录页面,地址是 https://dynamic.12306.cn/otsweb/loginAction.do?method=init ,访问该地址时,加载很多链接. 1.登录 
登录过程,需要下面条件:  
           —-验证码  
          ——- [GET]   https://dynamic.12306.cn/otsweb/passCodeAction.do?rand=sjrand
          —————验证码请求过程也可设置上面的cookie(如果上面未设定cookie)
          —————构造HTTPS请求(假设只发包,会出现403提示)  —-随机数  ——- [GET]   https://dynamic.12306.cn/otsweb/loginAction.do?method=loginAysnSuggest
              —————随机数请求完成任务如下:
              —————Set-Cookie: JSESSIONID=605B4539EA6825A9650AD6C383363E21; Path=/otsweb
              —————Set-Cookie: BIGipServerotsweb=2480144650.62495.0000; path=/             
               —————随机数在登录时会用到,随意设置会引起”拒绝访问”
                ——本缓存服务器管理员: wssupport@chinanetcenter.com
                ——Via:hbts175:8361 (Cdn Cache Server V2.0)
                ——Generated Fri, 18 Jan 2013 07:05:07 GMT by cache.51cdn.com (Cdn Cache Server V2.0)            
              —————正常访问,返回结果如下:
             —————{“loginRand”:”754″,”randError”:”Y”}  —-登录验证——- [post] https://dynamic.12306.cn/otsweb/loginAction.do?method=login
              整个登录过程如下:
A.先获取验证码
B.再获取随机号
C.POST提交-验证身份假设分开完成A,B,C请求,还能登录吗?
No.1 —— 验证码
No.2 —— 随机号
No.3 —— POST
熟悉HTTP/HTTPS协议,经常会看到Connection: keep-alive,12306在接受到数据之后,会返回数据给客户端.
如果只是单纯的提交而不接受,会提示403错误.No.1 验证码(省略)No.2 随机数(省略)
No.3 验证登录
  1. https://dynamic.12306.cn/otsweb/loginAction.do?method=login

  2. POST /otsweb/loginAction.do?method=login HTTP/1.1
  3. Host: dynamic.12306.cn
  4. User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
  5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  6. Accept-Language: en-US,en;q=0.5
  7. Accept-Encoding: gzip, deflate
  8. Referer: https://dynamic.12306.cn/otsweb/loginAction.do?method=init
  9. Cookie: JSESSIONID=CF514F57D43032422C0587E1A89AD0E7; BIGipServerotsweb=2647916810.22560.0000; BIGipServerotsquery=2379809034.33825.0000
  10. Connection: keep-alive
  11. Content-Type: application/x-www-form-urlencoded
  12. Content-Length: 163
  13. loginRand=随机数&refundLogin=N&refundFlag=Y&loginUser.user_name=用户名&nameErrorFocus=&user.password=密码&passwordErrorFocus=&randCode=验证码&randErrorFocus=
复制代码
此处的cookie,在请求回去随机数/验证码时生成(服务器返回set-cookie响应).POST提交的参数如下:
  1. POST https://dynamic.12306.cn/otsweb/loginAction.do?method=login
  2. loginRand=522               // 随机数
  3. &refundLogin=N             // 是否退票登录
  4. &refundFlag=Y               // 标识符号
  5. &loginUser.user_name=USERNAME     // 登录名
  6. &nameErrorFocus=
  7. &user.password=PASSWORD            // 登录密码
  8. &passwordErrorFocus=
  9. &randCode=MA3J                            // 验证码
  10. &randErrorFocus=
复制代码
#################################################################
2.订票
订票过程:
  No.1 —— 查询
       —— 该过程生成参数ypInfoDetail(查看余票情况)—- (对比参数leftTicketStr)
              ypInfoDetail  —— 1*****32091*****00003*****0000   // 请看后面ypInfoDetail详解
                                       1*****3209
                                       1*****0000
                                       3*****0000
              leftTicketStr —–  100685306510068500003014550000
                                       1006853065
                                       1006850000
                                       3014550000
  No.2 —— 预订
              ——–  参数leftTicketStr — 判断是否能够订票  No.3 —— 提交购票人信息
              ——–  参数leftTicketStr — 再次确认是否有票可购订票过程中,核心就是参数leftTicketStr,因为这个参数决定是否有票可买.
No.2与No.3之间的时间间隔,往往就是购票失败的原因.No.1 查询
  1. http://dynamic.12306.cn/otsquery/query/queryRemanentTicketAction.do?method=queryLeftTicket
  2. &orderRequest.train_date=2013-02-06
  3. &orderRequest.from_station_telecode=BXP
  4. &orderRequest.to_station_telecode=XXX       //目的地对应的telcode号码,例如:上海:AOH
  5. &orderRequest.train_no=
  6. &trainPassType=QB
  7. &trainClass=QB%23D%23Z%23T%23K%23QT%23
  8. &includeStudent=00
  9. &seatTypeAndNum=
  10. &orderRequest.start_time_str=00%3A00--24%3A00
复制代码
No.2 预定预定——选择车次
  1. POST https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=submutOrderRequest

  2. Host: dynamic.12306.cn
  3. User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  5. Accept-Language: en-US,en;q=0.5
  6. Accept-Encoding: gzip, deflate
  7. Referer: https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=init
  8. Cookie: JSESSIONID=0EDD19E0BDB7270959B2BF6A9B245227; BIGipServerotsweb=2647916810.22560.0000
  9. Connection: keep-alive
  10. Content-Type: application/x-www-form-urlencoded
  11. Content-Length: 710

  12. station_train_code=L417        // 车次号
  13. &train_date=2013-02-06        // 购票日期
  14. &seattype_num=                  // 座位号
  15. &from_station_telecode=BJP    // BJP --- 代表北京西
  16. &to_station_telecode=XXX       // XXX --- 目的地telecode
  17. &include_student=00
  18. &from_station_telecode_name=%E5%8C%97%E4%BA%AC%E8%A5%BF   // 北京西 ---- utf-8编码
  19. &to_station_telecode_name=目的地              // 目的地  ---- utf-8编码
  20. &round_train_date=2013-02-06                    // 购票日期
  21. &round_start_time_str=00:00--24:00             // 购票时间段
  22. &single_round_type=1
  23. &train_pass_type=QB
  24. &train_class_arr=QB#D#Z#T#K#QT#            // 查询列车类型(高铁/动车/普通客车/...)
  25. &start_time_str=00:00--24:00
  26. &lishi=14:46
  27. &train_start_time=20:50
  28. &trainno4=240000L41710
  29. &arrive_time=11:36
  30. &from_station_name=%E5%8C%97%E4%BA%AC   // 北京
  31. &to_station_name=目的地                                     // 目的地  ---- utf-8编码
  32. &from_station_no=01
  33. &to_station_no=14
  34. &ypInfoDetail=1*****32091*****00003*****0000      // 余票查询
  35. &mmStr=4709F8281ADB1C9DED5ED5D80BDAC4B884B9B235E601C9CE11B273A5    // ???
  36. &locationCode=P3
复制代码
^^^^^^^^^^^ypInfoDetail详解^^^^^^^^^^^
参考: http://www.v2ex.com/t/57909
  1. ypInfoDetail=1*****32091*****00003*****0000
  2. 1*****3209  // 大于3000表示无座票,减去3000表示剩余票数
  3. 1*****0000  // (1-硬座;3-硬卧;4-软卧)
  4. 3*****0000  //
复制代码
提交信息,获取车票—-<点击预定按钮后,填写购票人信息>
  1. https://dynamic.12306.cn/otsweb/order/confirmPassengerAction.do?method=checkOrderInfo&rand=验证码
  2. org.apache.struts.taglib.html.TOKEN=d75216f6ac1412e41e7dc39b091dbbd3
  3. &leftTicketStr=100685306510068500003014550000      // ypInfoDetail参数的详细版本.
  4. &textfield=%E4%B8%AD%E6%96%87%E6%88%96%E6%8B%BC%E9%9F%B3%E9%A6%96%E5%AD%97%E6%AF%8D  // 中文或拼音首字母
  5. &orderRequest.train_date=2013-02-06
  6. &orderRequest.train_no=240000L41710
  7. &orderRequest.station_train_code=L417         // 列车号
  8. &orderRequest.from_station_telecode=BJP
  9. &orderRequest.to_station_telecode=XXX        // 目的地telecode
  10. &orderRequest.seat_type_code=
  11. &orderRequest.ticket_type_order_num=
  12. &orderRequest.bed_level_order_num=000000000000000000000000000000
  13. &orderRequest.start_time=20%3A50
  14. &orderRequest.end_time=11%3A36
  15. &orderRequest.from_station_name=%E5%8C%97%E4%BA%AC
  16. &orderRequest.to_station_name=目的地     // utf-8编码
  17. &orderRequest.cancel_flag=1
  18. &orderRequest.id_mode=Y
  19. &passengerTickets=1%2Cundefined%2C1%2C姓名1%2C身份证号1%2C手机号%2CY  // 1,undefined,1,姓名(采用UTF-8编码),1,身份证号,手机号,Y
  20. &oldPassengers=
  21. &passenger_1_seat=1
  22. &passenger_1_ticket=1
  23. &passenger_1_name=姓名   // UTF8编码
  24. &passenger_1_cardtype=1  // 认证卡类型:-一般为身份证
  25. &passenger_1_cardno=身份证号
  26. &passenger_1_mobileno=手机号
  27. &checkbox9=Y
  28. &oldPassengers=
  29. &checkbox9=Y
  30. &oldPassengers=
  31. &checkbox9=Y
  32. &oldPassengers=
  33. &checkbox9=Y&oldPassengers=
  34. &checkbox9=Y&
  35. randCode=8UAR
  36. &orderRequest.reserve_flag=A
  37. &tFlag=dc
复制代码
填写完购票人信息,系统会借测是否有票可购
  1. https://dynamic.12306.cn/otsweb/order/confirmPassengerAction.do?method=getQueueCount
  2. &train_date=2013-02-06
  3. &train_no=240000L41710
  4. &station=L417
  5. &seat=1
  6. &from=BJP&to=XXX    // 目的地telecode
  7. &ticket=100685306510068500003014550000   // 对比ypInfoDetail
复制代码
最后一步,确认购票
  1. https://dynamic.12306.cn/otsweb/order/confirmPassengerAction.do?method=confirmSingleForQueueOrder
  2. org.apache.struts.taglib.html.TOKEN=d75216f6ac1412e41e7dc39b091dbbd3
  3. &leftTicketStr=100685306510068500003014550000        // 多次出现.
  4. &textfield=%E4%B8%AD%E6%96%87%E6%88%96%E6%8B%BC%E9%9F%B3%E9%A6%96%E5%AD%97%E6%AF%8D
  5. &orderRequest.train_date=2013-02-06
  6. &orderRequest.train_no=240000L41710
  7. &orderRequest.station_train_code=L417
  8. &orderRequest.from_station_telecode=BJP
  9. &orderRequest.to_station_telecode=XXX
  10. &orderRequest.seat_type_code=
  11. &orderRequest.ticket_type_order_num=
  12. &orderRequest.bed_level_order_num=000000000000000000000000000000
  13. &orderRequest.start_time=20%3A50
  14. &orderRequest.end_time=11%3A36
  15. &orderRequest.from_station_name=%E5%8C%97%E4%BA%AC
  16. &orderRequest.to_station_name=目的地名UTF8编码
  17. &orderRequest.cancel_flag=1
  18. &orderRequest.id_mode=Y
  19. &passengerTickets=1%2Cundefined%2C1%2C姓名1%2C身份证号1%2C手机号%2CY  // 1,undefined,1,姓名(采用UTF-8编码),1,身份证号,手机号,Y
  20. &oldPassengers=
  21. &passenger_1_seat=1
  22. &passenger_1_ticket=1
  23. &passenger_1_name=订票人姓名(可为他人订票)
  24. &passenger_1_cardtype=1
  25. &passenger_1_cardno=订票人身份证号(对应)
  26. &passenger_1_mobileno=订票人手机号(对应)
  27. &checkbox9=Y
  28. &oldPassengers=
  29. &checkbox9=Y
  30. &oldPassengers=
  31. &checkbox9=Y
  32. &oldPassengers=
  33. &checkbox9=Y
  34. &oldPassengers=
  35. &checkbox9=Y
  36. &randCode=8UAR
  37. &orderRequest.reserve_flag=A
复制代码
整个购票流程大致如此.如果成功匹配12306验证码,精确管理”预定/提交订票“这两处,实现抢票应该指日可待.
一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值