发送到第二个请求的参数是Base64编码后,解码后它们是:
'CallFrom':'1:16:38 PM|B2C|1:16:38 PM',
'Btype':'1:16:38 PM|A|1:16:38 PM',
'PaxConfig':'1:16:38 PM|2|0|2|0||1:16:38 PM',
'usid':'1:16:38 PM|henxvi3qegsrwqzewilkfp2m|1:16:38 PM'
乍一看,您已经注意到它们的模式如下:
$date|$param|$date
Where $date
是当前时间,格式为utc_ts_now.strftime("%I:%M:%S %p")
.
For $param
这四个参数的部分,我想它应该是固定的CallFrom
and Btype
, usid
is the sessionkey,你可以在之前的回复中轻松找到。
PaxConfig
是客人数量,它与roomConfiguration
您发送了第一个请求。
要自动执行第二个请求,您将首先生成每个参数的解码值,然后使用Base64
.
Update:
#!/usr/bin/env python3.7
import base64
from datetime import datetime
import requests
def first_request(session, params):
url = 'https://booking.discoverqatar.qa/SearchHandler.aspx'
r = session.get(url, params=params)
return r
def second_request(session, params):
url = 'https://booking.discoverqatar.qa/PassengerDetails.aspx'
r = session.get(url, params=params)
return r
def main():
params1 = {
'Module': 'H',
'txtCity': '',
'hdnCity': '2947',
'txtHotel': '',
'hdnHotel': '',
'fromDate': '05/11/2019',
'toDate': '07/11/2019',
'selZone': '',
'minSelPrice': '',
'maxSelPrice': '',
'roomConfiguration': '2|0|',
'noOfRooms': '1',
'hotelStandardArray': '63,60,54,50,52,51',
'CallFrom': '',
'DllNationality': '-1',
'HdnNoOfRooms': '-1',
'SourceXid': 'MTEzNzg=',
'mdx': ''
}
session = requests.Session()
_ = first_request(session, params1)
asp_session = session.cookies.get("ASP.NET_SessionId")
params2 = {
# Could related to options "Available" / "On Request"
"Btype": "A",
# Try out other guest counts to make sure
"PaxConfig": params1["roomConfiguration"] * 2,
"CallFrom": "B2C",
"usid": asp_session
}
date = datetime.utcnow().strftime("%I:%M:%S %p")
for k, v in params2.items():
v = "|".join([date, v, date])
v = base64.b64encode(bytes(v, "utf-8")).decode("utf-8")
params2[k] = v
r = second_request(session, params2)
print(r.text)
if __name__ == '__main__':
main()