Tiga Pintu Registri Publik Sebelum Menulis Scraper
Probe sembilan host registri publik: dua terbuka, satu captcha, dua WAF. Kenali tiga pola gerbang akses sebelum menulis satu baris scraper.
Ringkasan
Dikira semua portal SIPP struktur sama, ternyata beda-beda: ada yang kebuka, kena captcha, ditolak 403, bahkan koneksi ditolak. Jadi tiap host dites satu GET sopan, responsnya disimpen jadi fixture biar server nggak kebanyakan request. Host yang nolak nggak dilawan, cukup dicatat, dan perkara pailit/PKPU diklasifikasiin lokal soalnya token menunya nggak nge-filter beneran.
Rencana pilot memasang empat pengadilan Jakarta sebagai target pengambilan data perkara. Probe baca-saja kemudian membalik set itu: dua pengadilan terbuka, satu menyajikan halaman captcha, dua menjawab HTTP 403, dan satu varian tipis tanpa menu kepailitan.
Asumsi awal terdengar masuk akal: portal perkara di bawah satu institusi harus punya struktur endpoint yang sama. Kalau satu bisa diakses, yang lain pasti bisa. Kenyataannya, SIPP secara resmi adalah aplikasi web yang dibangun per satuan kerja pengadilan [5], sehingga variasi antar host adalah perilaku wajar, bukan anomali: ada host varian tipis berukuran 2,5 KB tanpa menu kepailitan, ada yang menolak koneksi, ada varian di domain lain yang memblokir.
Karena itu pemetaan gerbang akses dikerjakan lebih dulu, sebelum satu baris scraper ditulis.
Probe satu permintaan per host, simpan berkas fixture
Metodenya sederhana dan murah: satu permintaan GET sopan per host, dengan User-Agent yang menyebut tujuan pengambilan data secara transparan. Setiap respons mentah disimpan sebagai berkas fixture HTML yang di-commit ke repositori, sehingga pemeriksaan struktur halaman tidak perlu mengulang permintaan ke server target. Status tiap host dicatat apa adanya:
| Host | Status | Catatan |
|---|---|---|
sipp.pn-jakartabarat.go.id, sipp.pn-jakartautara.go.id, sipp.pn-depok.go.id | terbuka | layout sama, menu lengkap |
sipp.pn-jakartapusat.go.id | captcha | halaman validasi reCAPTCHA |
sipp.pn-jakartaselatan.go.id, sipp.pn-tangerang.go.id | HTTP 403 | menolak juga User-Agent browser |
sipp.pn-bogor.go.id | varian tipis | 2,5 KB, tanpa menu kepailitan |
sipp.pn-bekasikota.go.id | refused | koneksi ditolak |
Bentuk perintahnya:
curl -A "NamaBot/1.0 (kontak: [email protected])" \
-s -o fixture.html -w "%{http_code}" \
https://daftar-hitam.inaproc.id/
Etika probe mengacu pada RFC 9309: aturan robots bukan merupakan bentuk otorisasi akses [3]. Artinya sopan santun tetap menjadi beban desain: User-Agent jujur, jumlah permintaan dikecilkan, fixture di-cache, dan host yang menolak dicatat, bukan dilawan.
Kenali tiga pola gerbangnya
Pola terbuka. Halaman pertama Daftar Hitam Nasional LKPP dirender penuh di sisi server: kolom No, Penyedia, Skenario Penayangan, Nomor Paket, Paket, dan Tanggal Berlaku, dengan sanksi terbaru di urutan atas. Tidak ada tautan paginasi di HTML mentah karena halaman lanjutannya digerakkan JavaScript; snapshot harian halaman pertama pun cukup untuk pilot. Sumber ini juga punya dasar hukum yang jelas: sistem informasi yang memuat identitas penyedia yang dikenakan sanksi oleh pejabat pengadaan, berbasis Perpres 16/2018 [1].
Pola captcha. Pengadilan pusat menyajikan halaman validate.php berisi reCAPTCHA: platform proteksi bot yang mengumpulkan sinyal dari browser lalu mengembalikan token terenkripsi untuk dinilai di sisi backend [7]. Klien skrip tanpa lingkungan browser tidak bisa lewat, dan justru karena itu keputusannya tegas: tidak ada pemecahan captcha, host dicatat sebagai tergerbang dan dikeluarkan dari target otomatis.
Pola WAF. Dua pengadilan menjawab 403 bahkan pada User-Agent browser. Web application firewall menerapkan sekumpulan aturan pada percakapan HTTP untuk melindungi server [6]; 403 adalah keputusan di sisi server, bukan bug klien yang bisa diperbaiki dengan mengganti header atau memperlambat permintaan. Menerimanya sebagai batas adalah langkah paling murah.
Klasifikasi lokal, bukan token menu
Jebakan paling jujur ditemukan di dalam situs yang terbuka sekalipun. Tautan menu per jenis perkara memakai token opaqe berbentuk list_perkara/type/<token>, tetapi halaman token tidak benar-benar menyaring; semua jenis perkara tetap ter-render. Karena itu klasifikasi dilakukan lokal: tabel daftar perkara umum di-parse, pola nomor perkara Pdt.Sus-Pailit dan Pdt.Sus-PKPU menandai sinyal kepailitan dan PKPU (teks klasifikasi menjadi cadangan), dan nama perusahaan diambil dari kolom Para Pihak yang berawalan perseroan atau persekutuan.
Hasil probe menutup dengan keputusan konfigurasi, bukan kesimpulan teori: tiga host masuk set pilot, satu dicatat tergerbang captcha, dua dicatat WAF, sisanya dicatat sebagai variasi yang wajar. Semua keputusan di atas bisa dibaca ulang dari fixture tanpa menyentuh server siapa pun.
Sumber
- PPID LKPP: Aplikasi Daftar Hitam Nasional
- Dokumentasi APScheduler: apscheduler.triggers.cron
- RFC 9309: Robots Exclusion Protocol
- JDIH BPK: UU Nomor 27 Tahun 2022 tentang Pelindungan Data Pribadi
- Dokumentasi Mahkamah Agung: Pendahuluan Pencadangan SIPP
- OWASP: Web Application Firewall
- Google Cloud Documentation: Fraud Defense overview (reCAPTCHA)