12306图形界面抢票之Golang版

由于12306及时封堵了相关无需验证码购票的漏洞,导致原来写的无验证码版本不能使用,所以现在想自己用golang写一个GUI版本出来自己使用。

设计思路和选型

由于最近研究了下golang的相关UI库不是很丰富,自己想用walk来实现这个版本,考虑是因为可以暂时的跨平台使用,walk本身支持插件不是很丰富,但是目前我设想的ui也比较简单,就是text select button,没有其他复杂ui。

网上也有建议用qt实现UI的,以及用webkit实现一个webUI,用调用后端写的Rest接口,这个放到后面可以尝试实现一个。

基本思路还是遵循原来无验证码版本:多CDN切换,相似站点切换,加禁止缓存消息头,支持代理。

页面简单:登录和查询,查询包含了输入验证码之后自动提交。

TODO

图形

12306 12306

代码

ClientFor12306

日志

2014/06/23 22:03:17 [I] {武汉 重庆 T260,T257 2014-07-10 {王燕X 1 3 1 513025XXXX03184222} {陈慧X 1 1 1 421281XXXX12056327} { 1 3 1 } { 1 3 1 } { 1 3 1 }}
2014/06/23 22:03:17 [I] &{ [武汉] [重庆] [T260 T257] 3,0,1,王燕X,1,513025XXXX03184222,,N_1,0,1,陈慧X,1,421281XXXX12056327,,N 王燕X,1,513025XXXX03184222,1_陈慧X,1,421281XXXX12056327,1_ map[硬卧:1 硬座:1] 2014-07-10}
2014/06/23 22:03:17 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
2014/06/23 22:03:17 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
2014/06/23 22:03:17 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
2014/06/23 22:03:17 [I] 112.65.220.39 获取余票成功!
2014/06/23 22:03:17 [I] 112.65.220.39 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
2014/06/23 22:03:17 [I] 112.65.220.39 获取余票成功!
2014/06/23 22:03:17 [I] 112.65.220.39 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
2014/06/23 22:03:17 [I] 112.65.220.39 获取余票成功!
2014/06/23 22:03:17 [I] 112.65.220.39 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
2014/06/23 22:03:17 [I] submitOrderRequest params: back_train_date=2014-07-10&purpose_codes=ADULT&query_from_station_name=汉口&query_to_station_name=重庆北&secretStr=MjAxNC0wNy0xMCMwMCNUMjU3IzE0OjUyIzE2OjMwIzM5MDAwMFQyNTcwMCNIS04jQ1VXIzA3OjIyI%2BaxieWPoyPph43luobljJcjMDEjMTEjMTAxNTI1MzQzNDQwNDI3NTAwMTcxMDE1MjUwNjkyMzAyNzA1MDEyNCNOMSMxNDAzNTMyMjQ4NDEzI0RFQjU0NDg2NzNGRUU2QTk0MThDMzI1MTQzMjA3QjA4NzhENDBBM0JDRkIyREQ5N0FFMDVFNjUz&tour_flag=dc&train_date=2014-07-10&undefined
2014/06/23 22:03:18 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"messages":[],"validateMessages":{}}
2014/06/23 22:03:18 [I] token: 8bd10f609451d920c28137e152c5ca57
2014/06/23 22:03:18 [I] key_check_isChange: C2FD0F5277111341DA6DB588C0B87AFC287F30C260E3F0E06EA78A1F
2014/06/23 22:03:18 [I] train_location: N1
2014/06/23 22:03:18 [I] getPassengerDTO params: REPEAT_SUBMIT_TOKEN=8bd10f609451d920c28137e152c5ca57&_json_att=
2014/06/23 22:03:21 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
2014/06/23 22:03:22 [I] 111.8.9.196 获取余票成功!
2014/06/23 22:03:22 [I] 111.8.9.196 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
2014/06/23 22:03:38 [I] websocket: code#tzae 1
2014/06/23 22:03:38 [I] code: tzae
2014/06/23 22:03:38 [I] checkRandCodeAnsyn params: REPEAT_SUBMIT_TOKEN=&_json_att=&rand=randp&randCode=tzae
2014/06/23 22:03:39 [I] checkRandCodeAnsyn body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":"Y","messages":[],"validateMessages":{}}
2014/06/23 22:03:39 [I] 验证码: tzae
2014/06/23 22:03:39 [I] checkOrderInfo params: REPEAT_SUBMIT_TOKEN=8bd10f609451d920c28137e152c5ca57&_json_att=&bed_level_order_num=000000000000000000000000000000&cancel_flag=2&oldPassengerStr=%E7%8E%8B%E7%87%95%2C1%2C513025XXXX03184222%2C1_%E9%99%88%E6%85%A7%E8%8E%B9%2C1%2C421281XXXX12056327%2C1_&passengerTicketStr=3%2C0%2C1%2C%E7%8E%8B%E7%87%95%2C1%2C513025XXXX03184222%2C%2CN_1%2C0%2C1%2C%E9%99%88%E6%85%A7%E8%8E%B9%2C1%2C421281XXXX12056327%2C%2CN&randCode=tzae&tour_flag=dc
2014/06/23 22:03:39 [I] checkOrderInfo body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
2014/06/23 22:03:39 [I] getQueueCount params: REPEAT_SUBMIT_TOKEN=8bd10f609451d920c28137e152c5ca57&_json_att=&fromStationTelecode=HKN&leftTicket=1015253434404275001710152506923027050124&purpose_codes=00&seatType=3&stationTrainCode=T257&toStationTelecode=CUW&train_date=Mon+Jun+66+23063+69%3A3923%3A2310+GMT%2B0800+%28China+Standard+Time%29&train_no=390000T25700
2014/06/23 22:03:39 [I] getQueueCount body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
2014/06/23 22:03:39 [I] confirmSingleForQueue params: REPEAT_SUBMIT_TOKEN=8bd10f609451d920c28137e152c5ca57&_json_att=&key_check_isChange=C2FD0F5277111341DA6DB588C0B87AFC287F30C260E3F0E06EA78A1F&leftTicketStr=1015253434404275001710152506923027050124&oldPassengerStr=%E7%8E%8B%E7%87%95%2C1%2C513025XXXX03184222%2C1_%E9%99%88%E6%85%A7%E8%8E%B9%2C1%2C421281XXXX12056327%2C1_&passengerTicketStr=3%2C0%2C1%2C%E7%8E%8B%E7%87%95%2C1%2C513025XXXX03184222%2C%2CN_1%2C0%2C1%2C%E9%99%88%E6%85%A7%E8%8E%B9%2C1%2C421281XXXX12056327%2C%2CN&purpose_codes=00&randCode=tzae&train_location=N1
2014/06/23 22:03:40 [I] confirmSingleForQueue body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
2014/06/23 22:03:40 [I] 提交订单成功 body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
2014/06/23 22:03:40 [I] submitOrderRequest params: back_train_date=2014-07-10&purpose_codes=ADULT&query_from_station_name=汉口&query_to_station_name=重庆北&secretStr=MjAxNC0wNy0xMCMwMCNUMjU3IzE0OjUyIzE2OjMwIzM5MDAwMFQyNTcwMCNIS04jQ1VXIzA3OjIyI%2BaxieWPoyPph43luobljJcjMDEjMTEjMTAxNTI1MzQzNDQwNDI3NTAwMTcxMDE1MjUwNjkyMzAyNzA1MDEyNCNOMSMxNDAzNTMyMjQ4Mzk1IzkwRDEwQTk5N0NDRTk2QUVBMEFEMDQ3RkFCQkMzRDdFNzhENTJFMkY5NzQ3QUUwNEFGQjBDNzE5&tour_flag=dc&train_date=2014-07-10&undefined
2014/06/23 22:03:40 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","status":false,"httpstatus":200,"messages":["您还有未处理的订单,请您到<a href=\"../queryOrder/initNoComplete\">[未完成订单]</a>进行处理!"],"validateMessages":{}}
2014/06/23 22:03:41 [I] token: 441a46af1c8128a8bd4e86fc094da07e
2014/06/23 22:03:41 [I] key_check_isChange: C2FD0F5277111341DA6DB588C0B87AFC287F30C260E3F0E06EA78A1F
2014/06/23 22:03:41 [I] train_location: N1
2014/06/23 22:03:41 [I] getPassengerDTO params: REPEAT_SUBMIT_TOKEN=441a46af1c8128a8bd4e86fc094da07e&_json_att=
2014/06/23 22:03:44 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
2014/06/23 22:03:44 [I] 111.8.9.197 获取余票成功!
2014/06/23 22:03:44 [I] 111.8.9.197 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
2014/06/23 22:10:21 [I] b
2014/06/23 22:10:25 [I] CheckRandCodeAnsyn params: rand=sjrand&randCode=wdkb
2014/06/23 22:10:25 [I] &{{_validatorMessage true 200} N [] map[]}
2014/06/23 22:10:25 [I] Get New Cookie=JSESSIONID=2378B74CFA0EAA4D1E9D8F98DE71E101; BIGipServerotn=1289289994.64545.0000=
2014/06/23 22:10:25 [I]
2014/06/23 22:10:30 [I] CheckRandCodeAnsyn params: rand=sjrand&randCode=nd3f
2014/06/23 22:10:30 [I] &{{_validatorMessage true 200} Y [] map[]}
2014/06/23 22:10:30 [I] &{{_validatorMessage true 200} {Y} [] map[]}
2014/06/23 22:10:30 [E] 111.206.169.4 DoForWardRequest StatusCode: 302
2014/06/23 22:10:30 [E] k= X-Via v= [1.1 bjgam17:2 (Cdn Cache Server V2.0)]
2014/06/23 22:10:30 [E] k= Connection v= [keep-alive]
2014/06/23 22:10:30 [E] k= Date v= [Mon, 23 Jun 2014 14:11:21 GMT]
2014/06/23 22:10:30 [E] k= Server v= [Apache-Coyote/1.1]
2014/06/23 22:10:30 [E] k= X-Powered-By v= [Servlet 2.5; JBoss-5.0/JBossWeb-2.1]
2014/06/23 22:10:30 [E] k= Location v= [https://kyfw.12306.cn/otn/index/init]
2014/06/23 22:10:30 [E] k= Content-Language v= [zh-CN]
2014/06/23 22:10:30 [E] k= Content-Length v= [0]
2014/06/23 22:10:31 [I] getPassengerDTO params:
2014/06/23 22:10:31 [I] websocket: test 1
2014/06/23 22:10:36 [I] {武汉 重庆 T260,T257 2014-07-09 {王燕X 1 3 1 513025XXXX03184222} {陈慧X 1 3 1 421281XXXX12056327} { 1 3 1 } { 1 3 1 } { 1 3 1 }}
2014/06/23 22:10:36 [I] &{ [武汉] [重庆] [T260 T257] 3,0,1,王燕X,1,513025XXXX03184222,,N_3,0,1,陈慧X,1,421281XXXX12056327,,N 王燕X,1,513025XXXX03184222,1_陈慧X,1,421281XXXX12056327,1_ map[硬卧:2] 2014-07-09}
2014/06/23 22:10:36 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-09&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
2014/06/23 22:10:36 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-09&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
2014/06/23 22:10:36 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-09&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
2014/06/23 22:10:36 [I] 112.65.220.39 获取余票成功!