西南航空 F5 Shape 如何生成?
这几天西南航空的风控大幅度加强,咱们优化后的 6.0.0 版本并没有收到这次风控等级降级的影响。
Shape 风控会在申请头中退出 ee30zvqlwf-a、ee30zvqlwf-b、ee30zvqlwf-c、ee30zvqlwf-d、ee30zvqlwf-f、ee30zvqlwf-z 参数,通过这些参数对环境进行检测,并判断出是否是实在用户的流量。
接入 Demo
# -*- coding: utf-8 -*-
# @Time : 2023/3/28 6:50 AM
# @Author : TiggerRun
# 接入案例
# 🌍:TGRUN000
# 🌍:TGRUN001
import requests
import threading
import random
import json
url = api + '/search_flight'
airport = ["ALB", "ABQ", "AMA", "AUA", "ATL", "AUS"]
def get_flight_data():
while(True):
try:
# 发送搜寻申请体,和 wn 接口的申请形式统一
payload = '{"body": {"adultPassengersCount":"1","adultsCount":"1","departureDate":"2023-04-05","departureTimeOfDay":"ALL_DAY","destinationAirportCode":"' + random.choice(airport) + '","fareType":"USD","int":"HOMEQBOMAIR","originationAirportCode":"' + random.choice(airport) + '","passengerType":"ADULT","reset":"true","returnDate":"2023-04-06","returnTimeOfDay":"ALL_DAY","tripType":"roundtrip","application":"air-booking","site":"southwest"}}'
res = requests.post(url=url, headers={
"content-type": "application/json",
"connection": "close"
}, data=payload, timeout=10)
if res.status_code == 500:
print("申请频繁.")
elif res.status_code == 403:
print("返回谬误的状态码 403")
elif res.status_code == 400 or res.status_code == 200:
wn_data = json.loads(res.text)['data']['body']
print("返回数据", wn_data)
except Exception as ex:
pass
# create 10 thread
for i in range(10):
t = threading.Thread(target=get_flight_data)
t.start()
风控的特点
- 蜜罐:在风控不高的时候,往往会让谬误的 headers 通过申请,看似曾经绕过了 Shape,实际上并有,Shape 往往会误导你的想法。
- 检测动态变化:Shape 中蕴含一个有自定义解析器的虚拟环境,称之为虚拟化爱护(VMP),这使得测试十分艰难。
- 风控等级动态变化:在没有风控时,成功率简直为 100%,当网站风控等级晋升时,真人的搜寻都可能被回绝。
- 底层检测:在咱们的测试中,发现存在一些底层的检测,而不仅仅停留在 TLS。
长处
- 不须要短效 IP,获取数据的代理开销小(月均¥1000 代理)
- 咱们曾在 1 条 IP 中进行测试,咱们的 headers 能够获取上万条数据(!!!!仅 1 条代理!!!)
- 目前反对每家 /10 线程获取数据(每小时大略 1w 条无效数据),数据返回工夫均匀在 1 - 2 秒,如需扩增线程能够另外进行购买。
- 可 7 *24 小时获取实时数据
- 接口进行了封装,申请航司更加便捷
- 在咱们最新的框架中,绕过 Shape 的代码仅有 200 行,易于保护。
后盾展现
以下是部署的服务,成功率取决于 IP 的品质
# -*- coding: utf-8 -*-
# @Time : 2023/3/28 6:50 AM
# @Author : TiggerRun
# 接入案例
# 🌍:TGRUN000
# 🌍:TGRUN001