Bloga geri dön

2026'da TLS/JA4 parmak izi nasıl aşılır: curl_cffi ve tarayıcı taklit uygulamaları

Konut proxy'leri aldınız ama site ilk istekte hala 403 mü veriyor? TLS el sıkışması ile HTTP başlıklarından önce tespit ediliyorsunuz. JA3/JA4 parmak izi alma yöntemini ve bunu curl_cffi ve tarayıcı taklidi ile beş dakikada nasıl aşacağınızı inceliyoruz — kod, parmak izi kontrolü ve proxy seçimi ile.

📅21 Temmuz 2026
2026'da TLS/JA4 parmak izi nasıl aşılır: curl_cffi ve tarayıcı taklit uygulamaları

Yerleşik proxy satın aldınız, yeni bir Chrome User-Agent ayarladınız, ama site yine de ilk istekte 403 hatası veriyor. Tanıdık mı? Sorun IP'de ya da başlıklarda değil. Sunucu, en azından bir HTTP başlığı okumadan önce sizi TLS el sıkışması ile tespit etti. 2026 yılında bu, tespit için bir numaralı vektör ve sıradan requests bunu otomatik olarak geçemiyor. Bunun nasıl çalıştığını ve curl_cffi ile birkaç satır kodla nasıl düzeltileceğini inceleyelim.

Ne oluyor: sizi TLS el sıkışması ifşa ediyor

Müşteri HTTPS bağlantısı kurduğunda, ilk olarak ClientHello paketini gönderir — tüm HTTP'den önce. Bu pakette: TLS sürümü, desteklenen şifreleme setleri (cipher suites), TLS uzantıları (SNI, ALPN, supported_groups), eliptik eğriler ve nokta formatları listelenir. Bu alanların sırası ve içeriği farklı müşterilerde farklıdır — bu nedenle müşteri, bir kelime bile söylemeden önce tanınabilir.

Bu alanlardan bir parmak izi hesaplanır. JA3 (2017 standardı) TLSVersion,Ciphers,Extensions,EllipticCurves,ECPointFormats biçiminde bir dize alır ve bunu MD5 ile hashleyerek 32 karakterlik bir imza elde eder. JA3'ün sorunu, Ocak 2023'ten itibaren Chrome'un uzantıların sırasını rastgele hale getirmesidir — 16 uzantı, 16! (20 trilyondan fazla) kombinasyon sunar ve aynı tarayıcı farklı JA3'ler verir.

Bu nedenle endüstri JA4'e geçti (FoxIO, kitlesel benimseme 2024–2025). JA4, hashlemeden önce uzantı kodlarını hex değerine göre sıralar — Chrome'un rastgeleleştirmesi artık onu bozmaz. Hash, kesilmiş SHA-256'dır, insan tarafından okunabilir ve üç parçalıdır (a_b_c), ALPN ve QUIC/HTTP3 desteğini içerir. Örnek: Chrome 124 t13d1516h2 verir (15 şifre, 16 uzantı, ALPN h2), ancak çıplak Python requests t13d1715h2 verir. Anti-bot için ikinci imza, "bu bir betik" doğrudan işaretidir.

2026'da neden bununla bir yere varamazsınız

JA4 tespiti, tüm büyük satıcılara entegre edilmiştir: Cloudflare parmak izini izin listeleriyle karşılaştırır, Akamai ayrı bir HTTP/2 SETTINGS çerçevesi hash'i ekler, DataDome bilinen botlar veritabanıyla karşılaştırır. Mantık basit ve öldürücü: Eğer User-Agent: Chrome 131 gönderiyorsanız ve TLS parmak izi "urllib3/OpenSSL" diye bağırıyorsa — bu senkronizasyon bozukluğu demektir ve anında engellenirsiniz. Hiçbir proxy kurtarmaz: Python requests ile parmak izi olan mükemmel yerleşik IP bile kaybeder.

Tam da bu nedenle "proxy + parmak izi taklidi" kombinasyonu 2026'da scraping için temel hijyen haline geldi, gelişmişler için bir seçenek değil.

Çözüm: curl_cffi ile 5 dakikada

curl_cffi, curl-impersonate (Chrome'dan BoringSSL veya Firefox'tan NSS ile derlenmiş modifiye edilmiş curl) üzerine bir Python sarmalayıcıdır. Gerçek bir tarayıcı el sıkışmasını yeniden üretir ve neredeyse alışılmış requests ile aynı API'ye sahiptir.

Adım 1. Kurulum. Windows/macOS/Linux için curl-impersonate ikili dosyaları otomatik olarak çekilir:

pip install curl-cffi

Adım 2. Temel istek. İthali değiştirin ve bir parametre ekleyin:

from curl_cffi import requests

resp = requests.get("https://target.com/", impersonate="chrome")
print(resp.status_code)
print(resp.http_version)  # HTTP/2 — gerçek bir tarayıcı gibi

Bir satır impersonate="chrome" dört katmanı aynı anda taklit eder: TLS parmak izi (JA3/JA4), HTTP sürümü (HTTP/2 yerine HTTP/1.1), başlıkların sırası ve ALPN müzakereleri.

Adım 3. Her zaman genel takma adı kullanın, sürüm pinlemeyin. impersonate="chrome" (veya "safari", "safari_ios") yazın — takma ad otomatik olarak en güncel profili çözer. Sabitlenmiş impersonate="chrome124" geçersiz hale gelecektir: Chrome her ~4 haftada güncellenir ve eski profil kendisi bir anomali haline gelir. Güvenilir hedefler — Chrome, Edge ve Safari/iOS (chrome99'dan chrome131'e, safari15–18 profilleri).

Adım 4. Proxy ve oturumlar. Gerçek scraping için durumu bir oturumda tutun ve proxy ekleyin. Yerleşik veya mobil IP burada zorunludur — veri merkezi TLS'den ayrı olarak ASN ile tespit edilir:

from curl_cffi import requests

session = requests.Session(impersonate="chrome")

headers = {
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://www.google.com/",
}
proxies = {
    "http": "http://user:pass@proxy-host:port",
    "https": "http://user:pass@proxy-host:port",
}

resp = session.get("https://target.com", headers=headers, proxies=proxies)

Adım 5. Hacim için asenkronluk. requests'dan farklı olarak, curl_cffi kutudan çıktığı gibi async ve HTTP/2'yi destekler:

import asyncio
from curl_cffi.requests import AsyncSession

async def fetch(session, url):
    r = await session.get(url, impersonate="chrome")
    return r.status_code

async def main(urls):
    async with AsyncSession() as session:
        return await asyncio.gather(*[fetch(session, u) for u in urls])

asyncio.run(main(["https://target.com"] * 20))

Parmak izinizi kontrol edin — tahmin etmeyin

Gerçek trafik göndermeden önce, taklidin gerçekten çalıştığından emin olun. Kamuya açık doğrulayıcılara istek gönderin ve JA4'ü referans tarayıcı ile karşılaştırın:

  • tls.peet.ws — JA3, JA4, Akamai parmak izi ve HTTP/2 çerçevelerini JSON formatında döner. Bunu curl_cffi ile ve gerçek Chrome üzerinden isteyin, hash'leri karşılaştırın.
  • ja4db.com — bilinen JA4 veritabanı, kime benzediğinizi anlamanıza yardımcı olur.
  • browserleaks.com/tls ve Scrapfly'dan JA3/JA4 aracı — alanların detaylı dökümü.

Staging'de mitmproxy'yi scraper ile hedef arasında koymak ve her isteğin gerçek JA4 hash'ini izlemek kolaydır.

Tanı: hala 403/429 alıyorsanız

Parmak izi doğruysa ve engellemeler devam ediyorsa — sık karşılaşılanlardan nadir olanlara doğru kontrol listesine gidin:

  1. Veri merkezi IP'si. Sebep №1. Yerleşik proxy'lere veya mobil proxy'lere geçin — neden bir parmak izinin yeterli olmadığını IP Intelligence ile yerleşik proxy tespiti konusundaki makalede detaylıca ele aldık.
  2. Geçersiz profil. pip install -U curl-cffi ve genel takma ad "chrome".
  3. Çok yüksek oran. İstekler arasında 1–3 saniye rastgele beklemeler ekleyin.
  4. Çıplak başlıklar. Mutlaka Accept-Language, Accept-Encoding, Referer gönderin — bunların eksikliği de bir anomali olarak kabul edilir.
  5. Oturum ve IP senkronizasyonu. Kural: bir oturum — tüm yaşam süresi boyunca bir IP.
  6. 200 durumu ≠ başarı. Yanıtın gövdesini kontrol edin: 200 kodu altında CAPTCHA içeren bir sayfa olabilir.

curl_cffi nerede duvara çarpıyor

curl_cffi ağ katmanını kapatır — ve bu kadar. JavaScript çalıştırmaz. Bu nedenle JS zorluklarına karşı etkisizdir: Cloudflare Turnstile, "Tarayıcınızı kontrol ediyoruz..." (IUAM) sayfası, kontrol sonrası script tarafından yerleştirilen cf_clearance çerezi — bunların hepsi gerçek bir tarayıcı ortamı gerektirir. 2026'da CAPTCHA çözücülerin bu tür önleyici sistemlere karşı neredeyse çalışmayı bıraktığını ayrı bir incelemede CAPTCHA geçişi konusunu ele aldık.

JS duvarına çarptığınızda ne yapmalısınız:

  • Hibrit. Playwright veya Nodriver zorluğu geçer ve cf_clearance alır, ardından çerezi hızlı curl_cffi ile ana istekler için aktarır — böylece ağır tarayıcı için bir kez ödeme yaparsınız.
  • Çözücü hizmetleri (CapSolver, 2Captcha) otomatik token dağıtımı için.
  • Yönetilen scraping API'leri, eğer altyapıyı tutmak istemiyorsanız.

Ve thread güvenliğini unutmayın: her thread'e kendi oturumu. curl-cffi sürümünü requirements.txt dosyasında sabitleyin ve profilleri her 6–12 haftada bir gözden geçirin, tarayıcılar güncellendiğinde.

curl_cffi alternatifleri

  • tls-client — uTLS tabanlı Go kütüphanesi üzerinde bir sarmalayıcı, profillerle (chrome_124, safari_ios_17) ve random_tls_extension_order=True bayrağı ile. Parmak izinin esnek ince ayarı.
  • primp — Rust'ta bir istemci, impersonate_os'yi bağımsız olarak ayarlamanıza olanak tanır ve daha yüksek bir bant genişliği sağlar; dezavantajı — API tamamen requests ile uyuşmuyor ve kütüphane daha genç.

Hangi proxyye ihtiyacınız var ve neden

Parmak izi taklidi ve proxy, bir görevin farklı yarılarını çözer: curl_cffi "bağlantı nasıl görünüyor" sorusunu kapatır, proxy ise "nereden geliyor" sorusunu yanıtlar. Anti-bot her iki sinyali bağımsız olarak kontrol eder, bu nedenle mükemmel JA4 ile siyah veri merkezi-ASN işe yaramaz. Korunan hedefler (pazar yerleri, sosyal medya, seyahat toplayıcıları) için yerleşik veya mobil proxy'ler alın: bunların temiz operatör kökeni vardır ve mobil olanlar CGNAT "kalabalık etkisi" arkasında gizlenir. Veri merkezini, duyarsız hedefler ve yüksek hacim için bırakın.

Sonuç

2026'da scraping, yalnızca IP değil, kimliklerin oyunudur. Çıplak requests, TLS el sıkışması düzeyinde bir betik olarak görünür ve ilk başlıktan önce kaybeder. curl_cffi ile impersonate="chrome" içeriğini değiştirmek bu açığı beş dakikada kapatır, ancak yalnızca temiz bir yerleşik veya mobil IP ile ve sınırları anlayarak çalışır: ağ katmanı — evet, JavaScript zorlukları — hayır. Yığını dürüstçe toplayın: doğru parmak izi, doğru proxy, JS duvarında gerektiğinde tarayıcı ile hibrit — ve ilk istekte 403 hatası geçmişte kalacak.