| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- from urllib.parse import urljoin
- import requests
- import json
- import execjs
- # from curl_cffi import requests
- import retrying
- # import pyhttpx
- #
- # ja3 = "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-45-43-5-23-35-13-65281-16-65037-18-51-10-11-17513-27,29-23-24,0" # 自定义指纹字符串
- # sess = pyhttpx.HttpSession(
- # # ja3=ja3,
- # http2=True
- # )
- import tls_client
- headers = {
- "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
- "accept-language": "zh-CN,zh;q=0.9",
- "cache-control": "no-cache",
- "pragma": "no-cache",
- "priority": "u=0, i",
- "referer": "https://booking.jetstar.com/",
- "sec-ch-ua": "\"Google Chrome\";v=\"135\", \"Not-A.Brand\";v=\"8\", \"Chromium\";v=\"135\"",
- "sec-ch-ua-mobile": "?0",
- "sec-ch-ua-platform": "\"Windows\"",
- "sec-fetch-dest": "document",
- "sec-fetch-mode": "navigate",
- "sec-fetch-site": "same-origin",
- "sec-fetch-user": "?1",
- "upgrade-insecure-requests": "1",
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
- }
- def get_cookie():
- with open('akm/逆向.js', encoding='utf-8') as f:
- js = f.read()
- ctx = execjs.compile(js)
- session = requests.Session()
- # akm js file url
- akm_url = "https://booking.jetstar.com/Yxz-/5uZW/r/LS/v0HpqZQ/cY1w2bLGSLDp/UEtAAzo/SgIr/ED9jfEw"
- data = {
- 'sensor_data': ctx.call('encrypt1')
- }
- response = session.post(akm_url, headers=headers, verify=False, data=data,
- # proxies=self.proxies
- )
- # print(response.text)
- bmsz = response.cookies.get_dict()['bm_sz']
- data2 = {
- "sensor_data": ctx.call('encrypt2', bmsz)
- }
- data2 = json.dumps(data2)
- response2 = session.post(akm_url, headers=headers, data=data2, verify=False,
- # proxies=self.proxies
- )
- print('bmsz => ', bmsz)
- print(response2.text)
- print(response2.status_code)
- @retrying.retry(stop_max_attempt_number=2)
- def req(bmsz_cookie):
- params = {
- "s": "true",
- "adults": "1",
- "children": "0",
- "infants": "0",
- "selectedclass1": "economy",
- "currency": "CNY",
- "mon": "true",
- "channel": "DESKTOP",
- "origin1": "CTS",
- "destination1": "KOJ",
- "departuredate1": f"2025-05-27"
- }
- cookie = {
- 'bm_sz': bmsz_cookie
- }
- response = requests.get("https://booking.jetstar.com/hk/zh/booking/search-flights", headers=headers, cookies=bmsz_cookie, params=params,
- timeout=15,
- verify=False,
- # impersonate='chrome99',
- # http_version=2
- proxies=proxies
- # allow_redirects=False
- )
- print(response.text)
- print(response)
- from lxml import etree
- import json
- html = etree.HTML(response.text)
- data = html.xpath("//script[@id='bundle-data-v2']/text()")[0] if html.xpath(
- "//script[@id='bundle-data-v2']/text()") else '{}'
- json_data = json.loads(data)
- print(json_data)
- @retrying.retry(stop_max_attempt_number=3, wait_fixed=4000)
- def get_ja3_str( ):
- url = "http://8.218.51.130:9003/api/v1/ja3"
- payload = {}
- headers = {
- 'cid': '750B5141EDBF7FA6F73A99C768130099'
- }
- response = requests.get(url, headers=headers, data=payload)
- if response.status_code == 200:
- res_json = response.json()
- if res_json.get("code") == 0:
- ja3 = res_json.get("data").get("ja3_str")
- ua = res_json.get("data").get("ua")
- if "--" not in ja3 and ",," not in ja3:
- end_data = (
- ua,
- ja3
- )
- return end_data
- def tls_req(bmsz_cookie):
- ua, ja3_string = get_ja3_str()
- # current_cookie = cookies
- # browser = random.choice(self.BROWSER)
- req_session = tls_client.Session(
- ja3_string=ja3_string, # 直接注入自定义指纹
- )
- headers = {
- 'user-agent': ua,
- 'Accept-Encoding': 'gzip, deflate, br',
- 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
- 'Connection': 'keep-alive',
- 'Content-Type': 'application/x-www-form-urlencoded',
- 'accept-language': 'zh-CN,zh;q=0.9',
- 'cache-control': 'no-cache',
- 'pragma': 'no-cache',
- 'priority': 'u=0, i',
- 'referer': 'https://booking.jetstar.com/',
- 'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
- 'sec-ch-ua-mobile': '?0',
- 'sec-ch-ua-platform': '"Windows"',
- 'sec-fetch-dest': 'document',
- 'sec-fetch-mode': 'navigate',
- 'sec-fetch-site': 'same-origin',
- 'sec-fetch-user': '?1',
- 'upgrade-insecure-requests': '1'
- }
- params = {
- "s": "true",
- "adults": "1",
- "children": "0",
- "infants": "0",
- "selectedclass1": "economy",
- "currency": "CNY",
- "mon": "true",
- "channel": "DESKTOP",
- "origin1": "PVG",
- "destination1": "SYD",
- "departuredate1": f"2025-05-31"
- }
- redirect_count = 0
- max_redirects = 2
- cookie = {
- 'bm_sz': bmsz_cookie
- }
- proxies_url = 'http://B_3351_HK___5_ss-{}:ev2pjj@proxy.renlaer.com:7778'
- ip = 100000000000
- proxies = {
- 'http': proxies_url.format(ip),
- 'https': proxies_url.format(ip)
- }
- current_url = "https://booking.jetstar.com/hk/zh/booking/search-flights"
- while redirect_count < max_redirects:
- response = req_session.get(current_url, headers=headers, cookies=cookie, params=params,
- proxy=proxies
- )
- print(response.status_code)
- # print(response.text)
- # 检查是否为重定向状态码
- if response.status_code in (301, 302, 303, 307, 308):
- # 获取 Location 头(需处理相对路径)
- location = response.headers.get("Location")
- # if not location:
- # break
- current_url = urljoin(current_url, location)
- redirect_count += 1
- # print(f"Redirecting to: {current_url}")
- # 可选:继承原始请求的特定 Headers(如 Referer)
- # headers["Referer"] = response.url
- else:
- from lxml import etree
- import json
- html = etree.HTML(response.text)
- data = html.xpath("//script[@id='bundle-data-v2']/text()")[0] if html.xpath(
- "//script[@id='bundle-data-v2']/text()") else '{}'
- json_data = json.loads(data)
- print(json_data)
- return
- raise Exception(f" ({max_redirects})")
- # cookies = {
- # # "bm_sz": "C0B44D1663A1D1DF531263C2737158CA~YAAQuqzbF+g+wsyWAQAAXYayzRvvCtO5B+WPIETQGca8PO//hOzF1VgQ8UWaX5jQZqjBtJddRoQiBEhF8Kt/yAAy1PYYdaau8jE40Cfj3UxUpLerF6Bx7lMVhelxsPpebDhexd9epZ869ZHXU7vr1aD5waP/ryM62ifQhwkZhoZYCUTM+l4o3i6heEfjohv20aoENno39gXuJ62b7Pw/fWIV1iZsg9ZXz6cytoOozhB86c7SYg8S4F2uHmdRJCQwAle44prjdlu+Dr4InbJIQNhYP+vlzTTuJjMBQWidZncw+5SeoYGHGVhzONc4K8ojnfu1RdhhFfv1vWbT6jLa7pKh3sxzSOHYh7c3zXJsEp7bKFRcqWNO0dqt5NvlLXmOgdiQuOk=~4604742~4342593",
- # "bm_sz": "D0FDE91D248039D3BCB85401C9E89EBC~YAAQEmrRF7aHJueWAQAA7oY75xu9AR2ykLW/ST7t+Z/9dlMdB5y12d+59GyysxUFJhQNz3GORFkJm0LXmIRyzA3UQ1toCGCp7oib9mXRbovqxMUbdHe3FzPkg6P+Qkz523VsaKzS40mf4sPhh33AU7BTBLYYoTeOii1NKDjkX7xXK0UQQTmi3DLjkLHTXNYuvzNpRZLjMXsMqDOp0e7mm8altPSk8GMJPnA0mMcokJ348UHk9vL92QLq9FmvD0Oi6PQwgPlec/qRjN2rQBH/hYe0KETY6RwKtaVbti5MVbR84d2VWVkKZyQwmmcibWMSrwdxp+oZjCJ3kguEctLgrQlOUfFiQwXprYugwZM=~3159352~4407875",
- # }
- # url = "https://booking.jetstar.com/hk/zh/booking/search-flights"
- #
- # # get_cookie()
- # req(30)
- bmsz = cookies = {
- "bm_sz": "92BF676C3DD979E01C44FB2085A5EB17~YAAQHWrRFzRVgemWAQAAVomREBt8eEC//siHZ6ZbSARsn9I5LSlX4gu9JMhr+mKMUqle7mBkR+FaMJRD6bqONlFEMRiSPt47mEXkvqd2XdhB42MWCDbDyBL4Kq5AQAUstK/W5QCqigla+wVukC/J8BCF4uUXQeC8RLQFt7nELruQ95bcwOZ0dcK+DLBJqhl7tbFUBXwJzTg59ijCrpx/3KIPbsVb8fOnX5+3HE1bgrwurqAVOB7ZLwDy2rz0MR4TZegpmu1LroCHjdbOC97Sr8Bm0vwycXsd3P67jSVGKtsjMkBWFXPYAnnZEfVYFWkCvq33qY4VAMwP0+liJr7oV/OtUSxJNKOXMARY6g==~3683381~3421233",
- }
- try:
- proxies = {
- "http": "http://127.0.0.1:7897",
- "https": "http://127.0.0.1:7897"
- }
- req(bmsz)
- tls_req(bmsz_cookie=bmsz)
- except Exception as e:
- #
- print(e)
|