大家好,小編來(lái)為大家解答以下問(wèn)題,python小程序搶購(gòu)腳本怎么寫(xiě),如何用python編寫(xiě)搶票軟件,今天讓我們一起來(lái)看看吧!
需要的工具
- fiddler
-
python 3.8
第一步——抓包
由于之前我在大學(xué)的時(shí)候就有用python寫(xiě)腳本搶圖書(shū)館座位的經(jīng)驗(yàn),所以大概了解這種公共預(yù)約平臺(tái),其實(shí)就一個(gè)get或者post請(qǐng)求就能搞定拉。
所以用fiddler抓一下預(yù)約的api就好python好玩又簡(jiǎn)單的代碼。
你問(wèn)我為啥不用F12?見(jiàn)下圖
?
所以接下來(lái)在微信PC端先手動(dòng)預(yù)約成功一下,然后到fiddler中就可以找到api了。
?
這其中我碰到的坑
報(bào)錯(cuò):只能用微信客戶端打開(kāi)
這個(gè)還是比較容易解決的,只要將header中的 "User-Agent" 改成fiddler 中的樣子就OK了。
服務(wù)器持續(xù)返回405
一開(kāi)始百度,說(shuō)是將post方式改成get方式。我試了一下不行,而且fiddler提交方式也是post。
后面再百度,說(shuō)可能是這個(gè)鏈接就不支持post方式。
我一想是不是api搞錯(cuò)了,去fiddler一看,果然我復(fù)制粘貼少了,趕緊改了,果然服務(wù)器返回200,訪問(wèn)成功。
服務(wù)器返回未知錯(cuò)誤
這個(gè)可就哭死我了,看到200本來(lái)樂(lè)了一下,結(jié)果對(duì)方服務(wù)器居然不認(rèn)。
解體思路:?這種情況一般都是服務(wù)器看了你提交的信息,然后說(shuō):”滾,我看不懂?!斑@時(shí)候看看是不是數(shù)據(jù)漏了什么,或者格式是不是有問(wèn)題。
按照這個(gè)思路檢查代碼,果然提交的時(shí)候格式不匹配。
我用python提交的是dict類型,但是服務(wù)器只認(rèn)json。
將dict轉(zhuǎn)成json后,果然預(yù)約成功了!
附上代碼
import requests
import time
import json
# 先創(chuàng)建url 和 headers,然后直接request看行不行。
url = 'https://appointment-users.dataesb.com/api/appointment/pub_add/'
header = {
? ? "Accept": "*/*",
? ? "Accept-Encoding": "gzip, deflate, br",
? ? "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
? ? "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x6305002e)",
? ? "Referer": "https://appointment-users.dataesb.com/",
? ? "unionid": "oF-BrwA9WTNTX2DXed_Rad_pHp4g",
? ? "Content-Length" : "175",
? ? "Content-Type": "application/json;charset=UTF-8",
? ? "Origin": "https://appointment-users.dataesb.com" ,
? ? "Sec-Fetch-Dest" : "empty" ,
? ? "Sec-Fetch-Mode" : "cors" ,
? ? "Sec-Fetch-Site" : "same-site" ,?
? ? "Connection": "keep-alive" ,
? ? "Host": "appointment-backend-cdn.dataesb.com"
}
post_data = {"subLibId":"1089",
? ? ? ? ? ? ?"scheduleId":1268766,
? ? ? ? ? ? ?"children":0,
? ? ? ? ? ? ?"card":"",
? ? ? ? ? ? ?"cardType":"IDCARD",
? ? ? ? ? ? ?"name":"",
? ? ? ? ? ? ?"phone":"",
? ? ? ? ? ? ?"childrenConfig":False,
? ? ? ? ? ? ?"code":""}
time_str_13 = int(float(time.time()) * 1000) #創(chuàng)建時(shí)間戳
param = {
? ? "timestamp" : time_str_13,
? ? "callback" : "#/index/1089?counter=1646524800000"
}文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-854804.html
# 然后這樣執(zhí)行就好啦
r = requests.post(url, json = post_data, headers = header, params = param, verify = False)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-854804.html
需要的工具
- fiddler
-
python 3.8
第一步——抓包
由于之前我在大學(xué)的時(shí)候就有用python寫(xiě)腳本搶圖書(shū)館座位的經(jīng)驗(yàn),所以大概了解這種公共預(yù)約平臺(tái),其實(shí)就一個(gè)get或者post請(qǐng)求就能搞定拉。
所以用fiddler抓一下預(yù)約的api就好python好玩又簡(jiǎn)單的代碼。
你問(wèn)我為啥不用F12?見(jiàn)下圖
?
所以接下來(lái)在微信PC端先手動(dòng)預(yù)約成功一下,然后到fiddler中就可以找到api了。
?
這其中我碰到的坑
報(bào)錯(cuò):只能用微信客戶端打開(kāi)
這個(gè)還是比較容易解決的,只要將header中的 "User-Agent" 改成fiddler 中的樣子就OK了。
服務(wù)器持續(xù)返回405
一開(kāi)始百度,說(shuō)是將post方式改成get方式。我試了一下不行,而且fiddler提交方式也是post。
后面再百度,說(shuō)可能是這個(gè)鏈接就不支持post方式。
我一想是不是api搞錯(cuò)了,去fiddler一看,果然我復(fù)制粘貼少了,趕緊改了,果然服務(wù)器返回200,訪問(wèn)成功。
服務(wù)器返回未知錯(cuò)誤
這個(gè)可就哭死我了,看到200本來(lái)樂(lè)了一下,結(jié)果對(duì)方服務(wù)器居然不認(rèn)。
解體思路:?這種情況一般都是服務(wù)器看了你提交的信息,然后說(shuō):”滾,我看不懂?!斑@時(shí)候看看是不是數(shù)據(jù)漏了什么,或者格式是不是有問(wèn)題。
按照這個(gè)思路檢查代碼,果然提交的時(shí)候格式不匹配。
我用python提交的是dict類型,但是服務(wù)器只認(rèn)json。
將dict轉(zhuǎn)成json后,果然預(yù)約成功了!
附上代碼
import requests
import time
import json
# 先創(chuàng)建url 和 headers,然后直接request看行不行。
url = 'https://appointment-users.dataesb.com/api/appointment/pub_add/'
header = {
? ? "Accept": "*/*",
? ? "Accept-Encoding": "gzip, deflate, br",
? ? "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
? ? "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x6305002e)",
? ? "Referer": "https://appointment-users.dataesb.com/",
? ? "unionid": "oF-BrwA9WTNTX2DXed_Rad_pHp4g",
? ? "Content-Length" : "175",
? ? "Content-Type": "application/json;charset=UTF-8",
? ? "Origin": "https://appointment-users.dataesb.com" ,
? ? "Sec-Fetch-Dest" : "empty" ,
? ? "Sec-Fetch-Mode" : "cors" ,
? ? "Sec-Fetch-Site" : "same-site" ,?
? ? "Connection": "keep-alive" ,
? ? "Host": "appointment-backend-cdn.dataesb.com"
}
post_data = {"subLibId":"1089",
? ? ? ? ? ? ?"scheduleId":1268766,
? ? ? ? ? ? ?"children":0,
? ? ? ? ? ? ?"card":"",
? ? ? ? ? ? ?"cardType":"IDCARD",
? ? ? ? ? ? ?"name":"",
? ? ? ? ? ? ?"phone":"",
? ? ? ? ? ? ?"childrenConfig":False,
? ? ? ? ? ? ?"code":""}
time_str_13 = int(float(time.time()) * 1000) #創(chuàng)建時(shí)間戳
param = {
? ? "timestamp" : time_str_13,
? ? "callback" : "#/index/1089?counter=1646524800000"
}
# 然后這樣執(zhí)行就好啦
r = requests.post(url, json = post_data, headers = header, params = param, verify = False)
到了這里,關(guān)于如何用python編寫(xiě)搶票軟件,python爬蟲(chóng)小程序搶購(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!