Situs Terblokir, 403 dan Chrome Headless

Mungkin dalam publikasi pemrograman ini saya akan berusaha untuk memakai istilah internet berbahasa Indonesia resmi meskipun menurut saya akan menimbulkan sedikit jeda pengetahuan kalau anda sudah terbiasa dengan istilah berbahasa inggris.

Cek situs berikut lebih lanjut

https://id.wikipedia.org/wiki/Daftar_istilah_teknologi_informasi
https://id.wikipedia.org/wiki/Daftar_istilah_Internet_Indonesia

Situs Terblokir

Beberapa saat yang lalu saya dihadapkan dengan pemanfaatan situs web yang secara lokal termasuk dalam daftar hitam atau terblokir menurut kominfo.

Ada beberapa cara menurut saya sebenarnya bagaimana melewati situs-situs terblokir tersebut tapi terus terang tidak akan saya sampaikan secara detil tapi silahkan pake VPN kalau mau aman ataupun mengubah DNS.

Dalam kasus yang saya tangani diperlukan akses ke situs-situs terblokir tersebut untuk memperoleh pembaruan informasi. Kalau anda adalah progamer, misalnya dengan memakai Node.js untuk mengakses situs melalui kode seperti dibawah ini

function AksesSitusBlokir(url) {
return new Promise((resolve, reject) => {
request(url, (error, response, html) => {
if (!error) {
resolve(queryData(html));
} else {
reject(error);
}
})
})
}

Biasanya anda akan memperoleh kode status response 403 atau forbidden baik secara lokal atau misalnya jika anda menjalankannya di layanan Heroku.

Saya tidak tahu pasti alasan tepatnya tetapi mungkin karena ada policy tertentu di situs-situs tersebut seperti harus autentikasi kemudian harus memakai token untuk akses ke API mereka (dimana dalam kasus saya bukanlah suatu pilihan) atau karena alasan sederhana saja seperti same-origin policy dimana suatu kode tidak akan bisa mengakses DOM selama kode tersebut tidak berada pada satu origin atau katakanlah satu domain.

Kode status 403 memang sangat tergantung pada situs yang akan anda akses tetapi itu kemungkinan terburuk yang mungkin bisa terjadi jika secara anonymous anda ingin mengakses situs-situs tersebut.

Solusi yang saya dapatkan dan tidak harus berurusan dengan segala macam detil kode kustom ataupun registrasi dan sederhana saja yaitu dengan meniru akses peramban (browser) umum ke situs-situs tersebut tetapi akses ini dilakukan oleh peramban secara headless 😋. Seperti ini diagramnya kalau digambarkan

Solusinya yaitu memakai peramban Chrome dari Google. Sejak Chrome 59 (atau Chrome 60 di Windows) peramban tersebut bisa dipakai secara headless.

Bukankah sudah ada PhantomJS? memang tetapi alasan saya tidak memakainya karena untuk Windows 10 PhantomJS akan mengalami hang jika dipakai untuk request halaman web (#10845) dan statusnya-pun masih belum terselesaikan menurut saya.

Terakhir

Sangat mudah untuk mengakses isi DOM dari halaman situs yang telah di load oleh Chrome secara headless karena ada pilihan-dump-dom yang fungsinya yaitu secara otomatis peramban Chrome akan melemparkan DOM ke stdout

/**
* Reference
* https://developers.google.com/web/updates/2017/04/headless-chrome#node
*/
const url = "situs_terblokir"
const childArgs = ["--headless","--disable-gpu", "--dump-dom", url]
const bin = path.join("windows_chrome_canary_path", "chrome.exe")
childProcess.execFile(bin, childArgs, (err, stdout, stderr) => {
console.log(stderr)
if (!err) {
let dat = queryData(stdout, false)
console.log(dat)
} else {
console.log(err)
}
})

dan kemudian tentu saja data-data DOM tersebut bisa anda proses sesuai dengan kebutuhan anda.

— Selamat Meretas (…aka Happy Hacking 👀)

Show your support

Clapping shows how much you appreciated Equan Pr.’s story.