Belajar Scrapling - Networking & TLS Impersonation
Episode 13 of 23

Belajar Scrapling - Networking & TLS Impersonation

Membongkar lapisan networking di balik Scrapling: mekanisme JA3 dan JA4 fingerprint di handshake TLS, impersonasi profil browser lewat curl_cffi, HTTP/2 settings fingerprint, reuse connection serta cookie dalam session, dan cara memverifikasi bahwa fingerprint request benar-benar menyerupai browser asli.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 12 kalian sudah bergulat dengan proxy rotation dan penanganan blokir: memilih jenis proxy, merotasinya dengan ProxyRotator, dan memakai impersonate plus stealthy_headers untuk menyamar. Sekarang kita turun satu lapisan lebih dalam: networking dan TLS impersonation.

Episode ini membedah apa yang sebenarnya terjadi saat Fetcher.get mengirim request — bagaimana server membedakan request kalian dari request browser sungguhan, apa itu JA3 dan JA4 fingerprint, kenapa HTTP/2 settings ikut membocorkan identitas, serta bagaimana curl_cffi di balik Scrapling menyamarkannya semua. Kalian juga akan belajar memverifikasi sendiri bahwa request kalian benar-benar menyerupai browser.

Kenapa Fingerprint Bisa Menjadi Masalah

User-Agent sudah tidak lagi jadi satu-satunya penentu. Server modern melakukan passive fingerprinting: tanpa JavaScript sama sekali, mereka menganalisis paket pertama yang dikirim klien saat berkomunikasi. Pola ini dibentuk oleh konfigurasi library HTTP yang memulai koneksi — dan setiap library punya tanda tangan yang khas.

Python dengan requests polos, misalnya, menghasilkan pola handshake yang hampir tidak pernah dimiliki browser asli: urutan cipher suite yang beda, extension TLS yang kurang, dan HTTP/2 settings yang aneh. Begitu pola ini cocok dengan database library HTTP, request langsung dicap bot tanpa perlu menunggu JavaScript.

Pendekatan penyamaran ada dua level. Yang naif: meniru User-Agent. Yang serius: meniru seluruh fingerprint dari level TLS sampai level HTTP/2 — persis yang dilakukan impersonate di Scrapling.

JA3 dan JA4: Sidik Jari Handshake TLS

Saat koneksi HTTPS dibuka, klien mengirim ClientHello — paket yang mendeklarasikan TLS version, cipher suites, dan extension yang didukung. Kombinasi nilai-nilai inilah yang di-hash menjadi fingerprint.

JA3 adalah metode lama yang menghitung hash dari TLS version, cipher suite, dan extension pada ClientHello. Selama bertahun-tahun JA3 jadi standar de facto untuk mengenali klien. Kelemahannya: banyak klien memakai pengaturan yang sama, sehingga sulit membedakan dua browser, dan JA3 mudah disalahgunakan untuk kesalahan identifikasi.

JA4 adalah penerus yang lebih tajam. Ia memecah analisis ke beberapa kategori — TLS, HTTP/2, dan TCP — sehingga hasilnya lebih spesifik. Karena memisahkan fingerprint per protocol, JA4 bisa membedakan versi Chrome yang satu dan yang lain, bahkan menangkap perubahan kecil pada konfigurasi handshake.

Scrapling tidak menghitung hash ini secara manual — ia memakai curl_cffi, binding Python dari curl-impersonate. Library tersebut menyimpan preset lengkap untuk browser tertentu: urutan cipher suite, pilihan extension, kurva elliptic, hingga pengaturan HTTP/2, semua diambil dari handshake nyata browser tersebut. Saat kalian menulis impersonate="chrome", curl_cffi meniru seluruh preset itu, sehingga JA4 request kalian identik dengan Chrome versi terbaru.

Memilih Profil Impersonation

Nilai impersonate bisa berupa nama keluarga browser atau versi spesifik. Nama tanpa versi otomatis memakai versi terbaru yang tersedia di curl_cffi:

Pythonpilih-profil.py
from scrapling import Fetcher
 
page = Fetcher.get("https://example.com", impersonate="chrome")

Daftar yang umum tersedia: chrome, chrome_android, edge, firefox, safari, safari_ios, bahkan tor. Untuk versi spesifik, gunakan penanda seperti chrome110. Nilai list membuat Scrapling memilih profil secara acak di tiap request — berguna untuk menyebar pola di pool yang sama:

Pythonprofil-acak.py
from scrapling import Fetcher
 
page = Fetcher.get(
    "https://example.com",
    impersonate=["chrome", "firefox", "edge"],
)

Pilihannya bukan soal "yang paling bagus", melainkan konsistensi: pilih browser yang paling masuk akal untuk target kalian. Menargetkan pengguna Indonesia? Chrome Android dan Safari iOS adalah pilihan wajar.

Header yang Konsisten dengan Fingerprint

Fingerprint TLS yang sempurna akan sia-sia kalau User-Agent bilang Chrome versi terbaru sementara urutan header-nya menyebut library lain. Karena itu stealthy_headers=True penting: Scrapling membangkitkan ulang seluruh header request — termasuk urutannya — agar cocok dengan versi browser yang sedang diimpersonate.

Pythonheader-konsisten.py
from scrapling import Fetcher
 
page = Fetcher.get(
    "https://example.com",
    impersonate="chrome",
    stealthy_headers=True,
)

Urutan header terdengar sepele, tapi ini salah satu sinyal yang diperiksa anti-bot modern. Browser mengirim header dalam urutan tertentu; requests mengirimnya dengan urutan lain. Konsistensi antara TLS fingerprint dan header adalah ciri request yang meyakinkan.

HTTP/2, Session, dan Reuse Connection

Setelah handshake TLS selesai, permainan lanjut ke HTTP/2. Browser mengirim SETTINGS frame dengan parameter tertentu — tabel header size, max concurrent streams, dan lainnya. Kombinasi nilai ini menghasilkan HTTP/2 fingerprint yang juga khas per klien. curl_cffi mengelola semua ini otomatis, jadi kalian tidak perlu menyentuhnya secara manual.

Untuk HTTP/3, Scrapling punya parameter http3=True yang memakai QUIC. Catatan penting: HTTP/3 bisa bermasalah jika digabung dengan impersonate karena beberapa profil browser belum punya preset QUIC yang lengkap — uji di target kalian.

Yang lebih sering dipakai di produksi adalah reuse connection lewat session. FetcherSession mempertahankan satu connection pool dan berbagi cookie di seluruh request — persis perilaku satu sesi browser:

Pythonsession-networking.py
from scrapling import FetcherSession
 
with FetcherSession(
    impersonate="chrome",
    stealthy_headers=True,
    retries=3,
    retry_delay=1,
) as session:
    login = session.post(
        "https://example.com/login",
        data={"username": "user", "password": "pass"},
    )
    dashboard = session.get("https://example.com/dashboard")

Perhatikan: Fetcher di belakang layar juga memakai FetcherSession sementara untuk tiap request. Dengan memakai session secara eksplisit, TCP connection bisa dipakai ulang untuk request berikutnya — mengurangi biaya handshake baru tiap kali, dan koneksi yang hidup bertahan ini membuat perilaku kalian makin mirip pengguna sungguhan.

Memverifikasi Fingerprint Kalian Sendiri

Jangan percaya begitu saja. Site seperti tls.browserleaks.com/json menampilkan fingerprint yang dilihat server — bandingkan dengan request Scrapling:

Pythoncek-fingerprint.py
from scrapling import Fetcher
 
page = Fetcher.get("https://tls.browserleaks.com/json", impersonate="chrome")
print(page.text)

Keluaran JSON-nya berisi ja3n_hash dan ja4 request kalian. Lakukan eksperimen pembanding:

bandingkan.bash
python cek-fingerprint.py

Coba jalankan dengan impersonate="chrome" lalu dengan impersonate="firefox". Perhatikan nilai JA4 yang berubah. Bandingkan pula dengan request memakai curl polos — perbedaannya akan jelas, dan itulah alasan Scrapling memakai impersonation sejak episode 3.

Info

Fingerprint hanyalah satu sisi. Beberapa anti-bot canggih menambah challenge JavaScript atau memeriksa perilaku browser penuh — di situlah StealthyFetcher masuk, yang akan kalian bedah di episode 15.

Penutup

Kalian sekarang paham lapisan networking yang membuat request Scrapling sulit dibedakan dari browser: ClientHello TLS yang menghasilkan JA3 dan JA4, preset profil browser di curl_cffi, HTTP/2 settings yang ikut membocorkan identitas, serta session yang mempertahankan connection pool dan cookie. Yang paling penting, kalian tahu cara memverifikasi sendiri lewat browserleaks bahwa fingerprint kalian benar-benar menyerupai browser pilihan.

Inti yang harus dibawa pulang:

  • Server mengenali klien dari pola handshake TLS, bukan hanya User-Agent.
  • JA3 menghash ClientHello; JA4 memecah analisis per protocol dan jauh lebih spesifik.
  • impersonate di Scrapling meniru seluruh preset curl_cffi — cipher suite, extension, hingga HTTP/2 settings.
  • stealthy_headers=True menjaga header dan urutannya konsisten dengan profil yang dipilih.
  • FetcherSession memungkinkan reuse connection dan berbagi cookie, meniru perilaku sesi browser asli.

Di episode 14 kita berhenti sebentar dari teknis dan membahas hal yang sering dilupakan: security dan etika web scraping. Kalian akan belajar membaca robots.txt, memahami batasan Terms of Service, menata rate limit yang sopan, melindungi data yang diekstrak, dan mengamankan kredensial scraper kalian.

Belajar Scrapling - Networking & TLS Impersonation | Belajar Scrapling