دور زدن فینگرپرینت TLS با curl_cffi و tls-client (JA3/JA4)

منتشر شده در 2 ژوئن 2026 · زمان مطالعه ≈ 6 دقیقه

IPهای مسکونی تمیز خریده‌اید، آن‌ها را بی‌نقص می‌چرخانید، ولی باز هم روی اولین درخواست 403 می‌گیرید. مشکل از IP نیست — مشکل از دست‌دادن (handshake) TLS شماست. فینگرپرینت TLS به یک سرور اجازه می‌دهد کتابخانه‌ی کلاینت شما را پیش از خوانده‌شدن حتی یک بایت از درخواست HTTP شناسایی کند. این راهنما JA3/JA4 را توضیح می‌دهد، نشان می‌دهد چرا تشخیص requests پایتون پیش‌پاافتاده است، و کدی کاربردی برای جعل مرورگرهای واقعی با curl_cffi و tls-client ارائه می‌دهد.

فینگرپرینت TLS (JA3 / JA4) چیست؟

وقتی هر کلاینتی یک اتصال HTTPS باز می‌کند، یک ClientHello می‌فرستد که نسخه‌ی TLS، مجموعه‌ی رمزها، افزونه‌ها، منحنی‌های بیضوی و ترتیب همه‌ی این‌ها را اعلام می‌کند. این ترتیب به‌طرز چشمگیری مختص کتابخانه‌ای است که آن را ساخته. آن را هَش کنید و یک فینگرپرینت JA3 (یا نسخه‌ی جدیدتر و مقاوم‌تر JA4) به‌دست می‌آید.

Chrome یک فینگرپرینت تولید می‌کند. Firefox فینگرپرینتی دیگر. کتابخانه‌ی requests پایتون (ساخته‌شده روی urllib3 و OpenSSL) فینگرپرینتی تولید می‌کند که فریاد «اتوماسیون» می‌زند — و در میلیون‌ها بات یکسان است. سیستم‌های ضدبات یک فهرست مسدودسازی از این‌ها نگه می‌دارند. مهم نیست IP شما چقدر مسکونی باشد، یک JA3 شناخته‌شده‌ی بات علامت‌گذاری می‌شود.

اول فینگرپرینت خودتان را ببینید

پیش از درست‌کردن هر چیزی، آن را اندازه بگیرید. از اسکرپر خودتان یک درخواست به ابزار رایگان بررسی فینگرپرینت JA3/JA4 جیبائو بفرستید و آن را با آنچه یک Chrome واقعی نشان می‌دهد مقایسه کنید. اگر هَش‌های JA3 متفاوت باشند، هدف می‌تواند شما را از یک انسان تشخیص دهد — و Cloudflare هم همین‌طور.

چرا requests و httpx نمی‌توانند این را درست کنند

requests و httpx کار TLS را به OpenSSL سیستم می‌سپارند. می‌توانید تمام روز هدرها و حتی User-Agent را عوض کنید، ولی دست‌دادن زیرین همچنان مال OpenSSL است، نه Chrome. جعل هدر بدون جعل دست‌دادن، رایج‌ترین دلیل اتفاق‌افتادن «هدرهای مرورگر را کپی کردم ولی باز هم مسدود می‌کند» است. شما به کلاینتی نیاز دارید که پشته‌ی واقعی TLS مرورگر را تقلید کند.

با curl_cffi درستش کنید

curl_cffi به curl-impersonate بایند می‌شود، نسخه‌ای از curl که فینگرپرینت‌های واقعی TLS و HTTP/2 مرورگرها را بازتولید می‌کند. با یک آرگومان دست‌دادن شما شبیه Chrome می‌شود:

# pip install curl_cffi
from curl_cffi import requests

# جعل یک فینگرپرینت واقعی Chrome برای TLS + HTTP/2
r = requests.get(
    "https://tls.browserleaks.com/json",
    impersonate="chrome131",
)
print(r.json()["ja3_hash"])   # حالا با Chrome واقعی می‌خواند

این API آینه‌ی requests است، پس مهاجرت یک اسکرپر موجود بیشتر یک تغییر import یک‌خطی است. اهداف پشتیبانی‌شده شامل نسخه‌های اخیر Chrome، Edge، Safari و Firefox هستند — یکی را انتخاب کنید و آن را به‌روز نگه دارید، چون فینگرپرینت‌ها با به‌روزرسانی مرورگرها می‌چرخند.

آن را با پروکسی مسکونی ترکیب کنید

تطبیق فینگرپرینت و چرخش IP مکمل یکدیگرند، نه جایگزین. از هر دو استفاده کنید: یک دست‌دادن در سطح مرورگر روی یک IP مسکونی تمیز همان چیزی است که واقعاً عبور می‌کند:

from curl_cffi import requests

PROXY = "socks5h://USERNAME:[email protected]:10001"

r = requests.get(
    "https://example.com/protected",
    impersonate="chrome131",
    proxies={"http": PROXY, "https": PROXY},
    timeout=30,
)
print(r.status_code)

گزینه‌ی جایگزین: tls-client

tls-client (یک wrapper پایتون روی یک پیاده‌سازی uTLS با زبان Go) گزینه‌ی محکم دیگری است، با کتابخانه‌ی بزرگی از پروفایل‌های نام‌گذاری‌شده:

# pip install tls-client
import tls_client

session = tls_client.Session(
    client_identifier="chrome_120",
    random_tls_extension_order=True,
)

session.proxies = {
    "http": "socks5h://USERNAME:[email protected]:10001",
    "https": "socks5h://USERNAME:[email protected]:10001",
}

r = session.get("https://example.com/protected")
print(r.status_code)

random_tls_extension_order=True ترتیب افزونه‌ها را به‌هم می‌ریزد تا از یک فینگرپرینت ثابت و قابل‌استفاده‌ی مجدد جلوگیری کند — در برابر سیستم‌هایی که JA3 با تطابق دقیق را در طول زمان ردیابی می‌کنند مفید است.

چه زمانی هنوز به یک مرورگر واقعی نیاز دارید

برخی اهداف سیگنال‌های اجرای جاوااسکریپت (canvas، WebGL، زمان‌بندی رویداد) را بررسی می‌کنند که هیچ کلاینت HTTP‌ای بازتولیدشان نمی‌کند. آنجا، به‌جایش یک مرورگر واقعی را هدایت کنید — استفاده از پروکسی با Playwright و Puppeteer همراه با stealth را ببینید. مصالحه، هزینه و سرعت است: کلاینت‌های HTTP مانند curl_cffi به‌ازای هر درخواست بسیار ارزان‌ترند، پس هرجا کافی بودند از آن‌ها استفاده کنید و مرورگرهای کامل را برای سخت‌ترین اهداف نگه دارید.

چک‌لیست

فینگرپرینت TLS لایه‌ی گمشده در اکثر داستان‌های «IP تمیز ولی باز هم مسدود» است. دست‌دادن را درست کنید، IP مسکونی را نگه دارید، و نرخ موفقیت جهش می‌کند. برای پشته‌ی کامل در برابر سرسخت‌ترین WAF، دستورالعمل دور زدن Cloudflare در 2026 را بخوانید.

با IPهای تمیز فینگرپرینت را شکست دهید

۵ دلار اعتبار رایگان و IPهای مسکونی بگیرید تا با فینگرپرینت TLS در سطح مرورگر جفتشان کنید.

شروع تست رایگان

برای همه محصولات IP · هزاران نود همیشه در دسترس

همین حالا ثبت‌نام کنید و تا ۱۰۰٪ کش‌بک شارژ بگیرید

کاربران جدید با ثبت‌نام 500MB هدیه می‌گیرند، به‌علاوه بونوس اولین شارژ. پیشنهاد محدود.