Belajar Scrapling - Fetcher: Request HTTP & Session
Episode 3 of 23

Belajar Scrapling - Fetcher: Request HTTP & Session

Praktik pertama yang serius: menggunakan Fetcher untuk request HTTP — get dan post, FetcherSession untuk mempertahankan cookie, impersonate chrome untuk TLS fingerprint, serta stealthy_headers. Mengenal respons Adaptor, header, dan pola error handling terhadap status code.

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

Pendahuluan

Di episode 2 kalian sudah memetakan arsitektur Scrapling: fetchers, parser Adaptor, spiders, CLI, dan MCP server. Sekarang waktunya praktik serius pertama: berbicara HTTP dengan Fetcher.

Episode ini fokus pada request HTTP — get dan post, session yang mempertahankan cookie, impersonation browser, header stealth, serta cara menangani status code dan redirect dengan benar. Di akhir episode, kalian bisa mengambil halaman web apa pun dengan percaya diri dan menangani responnya seperti pro.

Fetcher.get: Request Pertama Kalian

Fetcher adalah kelas statis — panggil metodenya langsung tanpa instansiasi. Request paling sederhana dilakukan dengan get:

Pythonrequest-pertama.py
from scrapling import Fetcher
 
page = Fetcher.get("https://example.com")
 
print(page.status)
print(page.text[:200])

Perhatikan dua properti yang langsung tersedia: page.status memberi tahu status code, dan page.text berisi HTML mentah. Berkat TLS impersonation bawaan, request ini sudah tampil seperti dikirim dari browser, bukan dari Python polos.

Impersonation: Menyamarkan Fingerprint

Banyak website menolak request yang tidak dikirim dari browser — bukan hanya berdasarkan User-Agent, tapi berdasarkan TLS fingerprint. Server bisa mengenali library HTTP mana yang mengirim request dari pola handshake TLS-nya. Scrapling menyelesaikan ini dengan parameter impersonate:

Pythonimpersonate.py
from scrapling import Fetcher
 
page = Fetcher.get(
    "https://example.com",
    impersonate="chrome",
)
print(page.status)

Nilai chrome menyamarkan seluruh profil request — termasuk TLS fingerprint, header order, dan HTTP/2 settings — agar identik dengan Chrome asli. Opsi lain seperti firefox, safari, atau versi spesifik browser juga tersedia. Pilih browser yang paling dekat dengan mayoritas pengunjung target.

Info

Kalau satu website memblokir requests biasa tapi melayani browser normal, coba dulu impersonate="chrome" sebelum naik ke browser fetcher. Sering kali inilah yang dibutuhkan — tanpa overhead browser sungguhan.

Mengirim Data dengan Fetcher.post

Tidak semua target diambil dengan get. Form login, pencarian, dan filter biasanya butuh method post. Gunakan parameter data atau json:

Pythonpost-request.py
from scrapling import Fetcher
 
page = Fetcher.post(
    "https://example.com/login",
    data={"username": "arman", "password": "rahasia"},
    follow_redirects=True,
)

Parameter follow_redirects memastikan request mengikuti redirect yang terjadi setelah login. Hasilnya tetap objek Adaptor yang sama — seleksi berjalan persis seperti setelah get.

Sebagian besar situs yang serius melacak session lewat cookie. Kalau tiap request membuat koneksi baru tanpa cookie, server tidak akan mengingat kalian — login pun tidak bertahan. Di sinilah FetcherSession berperan. Ia menjaga cookie dan connection reuse antar request:

Pythonsession.py
from scrapling import Fetcher
 
session = FetcherSession(impersonate="chrome")
 
session.get("https://example.com/login")
page = session.post(
    "https://example.com/login",
    data={"username": "arman", "password": "rahasia"},
)
profil = session.get("https://example.com/profil")
 
print(profil.status)

Cookie yang diterima saat login otomatis dipertahankan dan dikirim ulang saat request profil. Inilah pola standar untuk situs yang butuh autentikasi: sekali login dengan session, lalu jelajahi halaman terproteksi tanpa mengirim kredensial lagi.

from scrapling import Fetcher
 
page = Fetcher.get("https://example.com/artikel")
# Tiap panggilan = koneksi & cookie baru

Headers Stealthy: Terlihat Lebih Manusiawi

Ada kalanya impersonate saja belum cukup. Website tertentu memperhatikan header tambahan seperti Referer atau X-Requested-With. Scrapling menyediakan stealthy_headers yang mengisi header populer dengan nilai realistis:

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

Kombinasi impersonate plus stealthy_headers membuat request tampil seperti kunjungan browser yang normal — lengkap dengan header yang biasanya dikirim browser asli. Untuk sebagian besar situs non-anti-bot, ini sudah lebih dari cukup.

Menangani Status Code dan Error

Dunia nyata tidak selalu mengembalikan 200. Website bisa merespons 403 (diblokir), 404 (tidak ada), atau 429 (rate limit). Kode yang baik harus memeriksa status sebelum memproses:

Pythonerror-handling.py
from scrapling import Fetcher
 
page = Fetcher.get("https://example.com/data")
 
if page.status == 200:
    print("Berhasil, panjang HTML:", len(page.text))
elif page.status == 403:
    print("Diblokir — coba ganti impersonate atau gunakan browser fetcher")
elif page.status == 429:
    print("Kena rate limit — tunggu sebelum request berikutnya")
else:
    print("Status lain:", page.status)

Selain memeriksa status, waspadai pula pola ketika status 200 tapi halaman berisi pesan error atau challenge. Saat data hasil seleksi kosong padahal status sukses, periksa page.text — bisa jadi kalian menerima halaman challenge anti-bot, bukan konten yang diinginkan.

Membaca Header Respons

Kadang kalian perlu memeriksa header respons — misalnya melihat Set-Cookie, Content-Type, atau tanggal pembaruan. Akses lewat properti headers:

Pythonbaca-header.py
from scrapling import Fetcher
 
page = Fetcher.get("https://example.com")
 
print(page.headers.get("Content-Type"))
print(page.headers.get("Last-Modified"))

Properti ini berguna untuk debugging: misalnya saat curiga server mengirim halaman kompresi atau redirect internal yang tidak terlihat dari status code.

Penutup

Episode 3 selesai. Kalian sekarang bisa mengambil halaman web dengan Fetcher.get dan Fetcher.post, mempertahankan login dengan FetcherSession, menyamarkan fingerprint dengan impersonate, mengisi header realistis dengan stealthy_headers, serta membaca status code dan header respons untuk error handling yang benar.

Inti yang harus dibawa pulang:

  • Fetcher.get dan Fetcher.post langsung mengembalikan Adaptor lengkap dengan status dan teks.
  • impersonate="chrome" menyamarkan TLS fingerprint, header order, dan HTTP/2 settings.
  • FetcherSession menjaga cookie dan koneksi agar autentikasi bertahan antar request.
  • stealthy_headers menambahkan header realistis agar request lebih mirip browser.
  • Selalu periksa status code dan curiga terhadap 200 kosong yang bisa jadi halaman challenge.

Di episode 4 kita belajar membaca hasil: Adaptor dan parsing dasar — seleksi CSS dan XPath, get lawan getall, chaining, dan ekstraksi teks serta atribut. Sampai jumpa!

Belajar Scrapling - Fetcher: Request HTTP & Session | Belajar Scrapling