request_test.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. from urllib.parse import urljoin
  2. import requests
  3. import json
  4. import execjs
  5. # from curl_cffi import requests
  6. import retrying
  7. # import pyhttpx
  8. #
  9. # 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" # 自定义指纹字符串
  10. # sess = pyhttpx.HttpSession(
  11. # # ja3=ja3,
  12. # http2=True
  13. # )
  14. import tls_client
  15. headers = {
  16. "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",
  17. "accept-language": "zh-CN,zh;q=0.9",
  18. "cache-control": "no-cache",
  19. "pragma": "no-cache",
  20. "priority": "u=0, i",
  21. "referer": "https://booking.jetstar.com/",
  22. "sec-ch-ua": "\"Google Chrome\";v=\"135\", \"Not-A.Brand\";v=\"8\", \"Chromium\";v=\"135\"",
  23. "sec-ch-ua-mobile": "?0",
  24. "sec-ch-ua-platform": "\"Windows\"",
  25. "sec-fetch-dest": "document",
  26. "sec-fetch-mode": "navigate",
  27. "sec-fetch-site": "same-origin",
  28. "sec-fetch-user": "?1",
  29. "upgrade-insecure-requests": "1",
  30. "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"
  31. }
  32. def get_cookie():
  33. with open('akm/逆向.js', encoding='utf-8') as f:
  34. js = f.read()
  35. ctx = execjs.compile(js)
  36. session = requests.Session()
  37. # akm js file url
  38. akm_url = "https://booking.jetstar.com/Yxz-/5uZW/r/LS/v0HpqZQ/cY1w2bLGSLDp/UEtAAzo/SgIr/ED9jfEw"
  39. data = {
  40. 'sensor_data': ctx.call('encrypt1')
  41. }
  42. response = session.post(akm_url, headers=headers, verify=False, data=data,
  43. # proxies=self.proxies
  44. )
  45. # print(response.text)
  46. bmsz = response.cookies.get_dict()['bm_sz']
  47. data2 = {
  48. "sensor_data": ctx.call('encrypt2', bmsz)
  49. }
  50. data2 = json.dumps(data2)
  51. response2 = session.post(akm_url, headers=headers, data=data2, verify=False,
  52. # proxies=self.proxies
  53. )
  54. print('bmsz => ', bmsz)
  55. print(response2.text)
  56. print(response2.status_code)
  57. @retrying.retry(stop_max_attempt_number=2)
  58. def req(bmsz_cookie):
  59. params = {
  60. "s": "true",
  61. "adults": "1",
  62. "children": "0",
  63. "infants": "0",
  64. "selectedclass1": "economy",
  65. "currency": "CNY",
  66. "mon": "true",
  67. "channel": "DESKTOP",
  68. "origin1": "CTS",
  69. "destination1": "KOJ",
  70. "departuredate1": f"2025-05-27"
  71. }
  72. cookie = {
  73. 'bm_sz': bmsz_cookie
  74. }
  75. response = requests.get("https://booking.jetstar.com/hk/zh/booking/search-flights", headers=headers, cookies=bmsz_cookie, params=params,
  76. timeout=15,
  77. verify=False,
  78. # impersonate='chrome99',
  79. # http_version=2
  80. proxies=proxies
  81. # allow_redirects=False
  82. )
  83. print(response.text)
  84. print(response)
  85. from lxml import etree
  86. import json
  87. html = etree.HTML(response.text)
  88. data = html.xpath("//script[@id='bundle-data-v2']/text()")[0] if html.xpath(
  89. "//script[@id='bundle-data-v2']/text()") else '{}'
  90. json_data = json.loads(data)
  91. print(json_data)
  92. @retrying.retry(stop_max_attempt_number=3, wait_fixed=4000)
  93. def get_ja3_str( ):
  94. url = "http://8.218.51.130:9003/api/v1/ja3"
  95. payload = {}
  96. headers = {
  97. 'cid': '750B5141EDBF7FA6F73A99C768130099'
  98. }
  99. response = requests.get(url, headers=headers, data=payload)
  100. if response.status_code == 200:
  101. res_json = response.json()
  102. if res_json.get("code") == 0:
  103. ja3 = res_json.get("data").get("ja3_str")
  104. ua = res_json.get("data").get("ua")
  105. if "--" not in ja3 and ",," not in ja3:
  106. end_data = (
  107. ua,
  108. ja3
  109. )
  110. return end_data
  111. def tls_req(bmsz_cookie):
  112. ua, ja3_string = get_ja3_str()
  113. # current_cookie = cookies
  114. # browser = random.choice(self.BROWSER)
  115. req_session = tls_client.Session(
  116. ja3_string=ja3_string, # 直接注入自定义指纹
  117. )
  118. headers = {
  119. 'user-agent': ua,
  120. 'Accept-Encoding': 'gzip, deflate, br',
  121. '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',
  122. 'Connection': 'keep-alive',
  123. 'Content-Type': 'application/x-www-form-urlencoded',
  124. 'accept-language': 'zh-CN,zh;q=0.9',
  125. 'cache-control': 'no-cache',
  126. 'pragma': 'no-cache',
  127. 'priority': 'u=0, i',
  128. 'referer': 'https://booking.jetstar.com/',
  129. 'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
  130. 'sec-ch-ua-mobile': '?0',
  131. 'sec-ch-ua-platform': '"Windows"',
  132. 'sec-fetch-dest': 'document',
  133. 'sec-fetch-mode': 'navigate',
  134. 'sec-fetch-site': 'same-origin',
  135. 'sec-fetch-user': '?1',
  136. 'upgrade-insecure-requests': '1'
  137. }
  138. params = {
  139. "s": "true",
  140. "adults": "1",
  141. "children": "0",
  142. "infants": "0",
  143. "selectedclass1": "economy",
  144. "currency": "CNY",
  145. "mon": "true",
  146. "channel": "DESKTOP",
  147. "origin1": "PVG",
  148. "destination1": "SYD",
  149. "departuredate1": f"2025-05-31"
  150. }
  151. redirect_count = 0
  152. max_redirects = 2
  153. cookie = {
  154. 'bm_sz': bmsz_cookie
  155. }
  156. proxies_url = 'http://B_3351_HK___5_ss-{}:ev2pjj@proxy.renlaer.com:7778'
  157. ip = 100000000000
  158. proxies = {
  159. 'http': proxies_url.format(ip),
  160. 'https': proxies_url.format(ip)
  161. }
  162. current_url = "https://booking.jetstar.com/hk/zh/booking/search-flights"
  163. while redirect_count < max_redirects:
  164. response = req_session.get(current_url, headers=headers, cookies=cookie, params=params,
  165. proxy=proxies
  166. )
  167. print(response.status_code)
  168. # print(response.text)
  169. # 检查是否为重定向状态码
  170. if response.status_code in (301, 302, 303, 307, 308):
  171. # 获取 Location 头(需处理相对路径)
  172. location = response.headers.get("Location")
  173. # if not location:
  174. # break
  175. current_url = urljoin(current_url, location)
  176. redirect_count += 1
  177. # print(f"Redirecting to: {current_url}")
  178. # 可选:继承原始请求的特定 Headers(如 Referer)
  179. # headers["Referer"] = response.url
  180. else:
  181. from lxml import etree
  182. import json
  183. html = etree.HTML(response.text)
  184. data = html.xpath("//script[@id='bundle-data-v2']/text()")[0] if html.xpath(
  185. "//script[@id='bundle-data-v2']/text()") else '{}'
  186. json_data = json.loads(data)
  187. print(json_data)
  188. return
  189. raise Exception(f" ({max_redirects})")
  190. # cookies = {
  191. # # "bm_sz": "C0B44D1663A1D1DF531263C2737158CA~YAAQuqzbF+g+wsyWAQAAXYayzRvvCtO5B+WPIETQGca8PO//hOzF1VgQ8UWaX5jQZqjBtJddRoQiBEhF8Kt/yAAy1PYYdaau8jE40Cfj3UxUpLerF6Bx7lMVhelxsPpebDhexd9epZ869ZHXU7vr1aD5waP/ryM62ifQhwkZhoZYCUTM+l4o3i6heEfjohv20aoENno39gXuJ62b7Pw/fWIV1iZsg9ZXz6cytoOozhB86c7SYg8S4F2uHmdRJCQwAle44prjdlu+Dr4InbJIQNhYP+vlzTTuJjMBQWidZncw+5SeoYGHGVhzONc4K8ojnfu1RdhhFfv1vWbT6jLa7pKh3sxzSOHYh7c3zXJsEp7bKFRcqWNO0dqt5NvlLXmOgdiQuOk=~4604742~4342593",
  192. # "bm_sz": "D0FDE91D248039D3BCB85401C9E89EBC~YAAQEmrRF7aHJueWAQAA7oY75xu9AR2ykLW/ST7t+Z/9dlMdB5y12d+59GyysxUFJhQNz3GORFkJm0LXmIRyzA3UQ1toCGCp7oib9mXRbovqxMUbdHe3FzPkg6P+Qkz523VsaKzS40mf4sPhh33AU7BTBLYYoTeOii1NKDjkX7xXK0UQQTmi3DLjkLHTXNYuvzNpRZLjMXsMqDOp0e7mm8altPSk8GMJPnA0mMcokJ348UHk9vL92QLq9FmvD0Oi6PQwgPlec/qRjN2rQBH/hYe0KETY6RwKtaVbti5MVbR84d2VWVkKZyQwmmcibWMSrwdxp+oZjCJ3kguEctLgrQlOUfFiQwXprYugwZM=~3159352~4407875",
  193. # }
  194. # url = "https://booking.jetstar.com/hk/zh/booking/search-flights"
  195. #
  196. # # get_cookie()
  197. # req(30)
  198. bmsz = cookies = {
  199. "bm_sz": "92BF676C3DD979E01C44FB2085A5EB17~YAAQHWrRFzRVgemWAQAAVomREBt8eEC//siHZ6ZbSARsn9I5LSlX4gu9JMhr+mKMUqle7mBkR+FaMJRD6bqONlFEMRiSPt47mEXkvqd2XdhB42MWCDbDyBL4Kq5AQAUstK/W5QCqigla+wVukC/J8BCF4uUXQeC8RLQFt7nELruQ95bcwOZ0dcK+DLBJqhl7tbFUBXwJzTg59ijCrpx/3KIPbsVb8fOnX5+3HE1bgrwurqAVOB7ZLwDy2rz0MR4TZegpmu1LroCHjdbOC97Sr8Bm0vwycXsd3P67jSVGKtsjMkBWFXPYAnnZEfVYFWkCvq33qY4VAMwP0+liJr7oV/OtUSxJNKOXMARY6g==~3683381~3421233",
  200. }
  201. try:
  202. proxies = {
  203. "http": "http://127.0.0.1:7897",
  204. "https": "http://127.0.0.1:7897"
  205. }
  206. req(bmsz)
  207. tls_req(bmsz_cookie=bmsz)
  208. except Exception as e:
  209. #
  210. print(e)