秀动抢票 python逆向接口-gettoken(2)

秀动抢票 gettoken

更新不会很快,第一次写,会有点乱。
第二章 Cusat Cusit获取



前言

我是一个游戏开发者,最近转型干了医疗,喜欢爬虫,网上冲浪看到喜欢的东西想保存下来。

为什么选择秀动呢?因为我和女朋友喜欢的乐队都是一些不算大热门的乐队,大麦很少有他们的票。比如【夏日入侵企画】【康姆士】【霓虹花园】【帆布小镇】等等之类。他们的票,以前在深圳500人场的时候,很难抢!现在光明那个1000人+的场馆开了以后,票容易抢了很多。虽然咸鱼可以加价买到他们的票,但是我宁死不从!


一、Post参数

sign
st_flpv
trackPath
秀动参数配置教程
在这里插入图片描述
这是一个post协议,把上面的参数转成json格式的字符串,就行了,不需要对参数进行别的加密。

data = {
          'sign': self.sign,
          'st_flpv': self.st_flpv,
          'trackPath': ''
}
json_data = json.dumps(data)

二、Crpsign加密

在秀动协议里,都会用到这个crpsign加密,这是一个MD5加密

在wap里他的加密方式是 a+t+i+s+"wap"+_+E+n,url+"997"+f+v

然后进行md5加密
在这里插入图片描述
这些混淆的参数对应的是

cusat + sign + cusit + userID + "wap" + cuuserref + E + url + "997" + "wap" + v

这里虽然填写了cusat cusit 因为没具体获取到值,此时他们还是空字符串 “”,
url 指得是 每个协议的v3后面的参数 例如gettoken协议:

https://wap.showstart.com/v3/waf/gettoken 他所对应的url就是
/waf/gettoken

E是这次协议post参数的字符串,上面已经说了具体的参数。

其他对应的参数都可以在秀动参数配置教程这里找到

二、v加密

这是一个每次请求都会动态变化的值,在请求头里的key是Crtraceid
一个随机字符串,给后面的值做密钥用的,没有具体含义
v = e(32)

def v( e):
    n = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + str(int(time.time() * 1000))
    t = []
    for i in range(e):
        t.append(n[int(random.random() * len(n))])
    return "".join(t) + str(qtime())

总结

Crpsign 和 Crtraceid是秀动所有协议都需要的参数,只有搞懂这2个参数的加密方式,后面才可以提交订单,支付订单。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
抢票程序需要先通过登录获取cookie和token,然后再发送请求进行抢票。 首先,需要导入requests和json库。 ``` import requests import json ``` 然后,定义请求头和登录信息。 ``` headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36', 'Referer': 'https://www.damai.cn/', 'Origin': 'https://www.damai.cn/', 'Content-Type': 'application/json;charset=UTF-8' } login_data = { "username": "your_username", "password": "your_password" } ``` 接着,使用session模拟登录,获取cookie和token。 ``` session = requests.session() # 登录 login_url = 'https://secure.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F' session.post(login_url, headers=headers, data=json.dumps(login_data)) # 获取cookie和token cookie = session.cookies.get_dict() token_url = 'https://www.damai.cn/ajax/getToken.html' token_data = {'t': '0.5479031191044676'} token_res = session.post(token_url, headers=headers, data=json.dumps(token_data)) token = token_res.json()['token'] ``` 接下来,定义抢票的请求信息。 ``` order_data = { "buyNum": 1, "chooseSeats": "", "chooseSeatr": "", "chooseFriends": "", "addFriends": "", "buyChannels": "", "coupons": "", "discount": "", "eticket": "", "invoice": "", "invoiceTitle": "", "memberCard": "", "payChannels": "", "presaleToken": "", "price": "", "project_id": "", "quantity": 1, "skuId": "", "spm": "", "ticketCode": "", "ticketPriceId": "", "ticketStatus": "", "tickets": "", "traceId": "", "token": token } ``` 其中,需要填写的信息有: - buyNum:购买数量 - chooseSeats:选座信息 - quantity:购买数量 - token:刚刚获取到的token 最后,定义抢票的函数。 ``` def buy_ticket(project_id, sku_id, quantity): # 订单请求信息 order_data['project_id'] = project_id order_data['skuId'] = sku_id order_data['quantity'] = quantity # 发送抢票请求 order_url = 'https://piao.damai.cn/quickbuy.htm' order_res = session.post(order_url, headers=headers, data=json.dumps(order_data), cookies=cookie) order_result = order_res.json() # 判断是否抢票成功 if order_result['success']: print('抢票成功!订单号为:{}'.format(order_result['order']['orderId'])) else: print('抢票失败,原因:{}'.format(order_result['errorMsg'])) ``` 使用方法: ``` buy_ticket('123456', '7890123', 2) ``` 其中,第一个参数为活动的ID,第二个参数为票品的ID,第三个参数为购买数量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值