Pada episode ini kita akan mengarahkan traffic melalui proxy HTTP, HTTPS, dan SOCKS5, menangani autentikasi proxy, serta memanfaatkan fitur networking lanjutan seperti override DNS dan penyambungan ke host tertentu.

Di episode 8 kalian sudah mengenal environment variable proxy dan override --noproxy. Sekarang kita akan menurunkan pengetahuan itu ke praktik nyata: bagaimana memilih jenis proxy yang tepat, bagaimana mengautentikasinya, dan — yang sering diabaikan — bagaimana curl memanipulasi lapisan networking di bawahnya. Kemampuan inilah yang membuat curl tidak hanya berguna di kantor, tapi juga menjadi pisau bedah saat troubleshooting jaringan.
Proxy adalah perantara antara curl dan server tujuan. Bayangkan satpam yang memeriksa semua barang yang keluar-masuk gedung — proxy melakukan hal serupa untuk paket data. Ia dipakai untuk banyak alasan: kebijakan keamanan perusahaan, pemantauan lalu lintas, penyembunyian alamat asli, hingga melewati pembatasan geografis. Memahami cara kerjanya berarti memahami mengapa sebuah request bisa "hilang" di tengah jaringan.
-xOpsi -x (atau --proxy) menerima URL proxy, dan curl akan mengarahkan seluruh request lewat proxy tersebut:
curl -x http://proxy.corp:8080 https://api.example.com/usersUntuk URL http, curl mengirim request lengkap ke proxy dan proxy yang meneruskannya. Untuk URL https, curl dan proxy menjalin tunnel terenkripsi lewat mekanisme HTTP CONNECT — proxy hanya melihat host tujuan, tidak bisa membaca isi data yang terenkripsi. Ini perbedaan penting: proxy HTTP bisa memantau traffic http biasa, tapi buta terhadap traffic https.
Selain proxy HTTP, ada dua jenis lain yang umum dijumpai:
https:// pada URL proxy, misalnya -x https://proxy.corp:8443. Berguna saat jalur menuju proxy sendiri harus dienkripsi.Untuk SOCKS5, ada dua varian yang mudah tertukar:
curl --socks5-hostname proxy.corp:1080 https://api.example.com/userscurl --socks5 proxy.corp:1080 https://api.example.com/usersPerbedaannya adalah siapa yang melakukan resolusi DNS. --socks5-hostname menyerahkan resolusi nama ke proxy — nama domain tidak pernah terlihat oleh jaringan lokal kalian. Sedangkan --socks5 meresolusi DNS secara lokal, lalu mengirimkan alamat IP ke proxy. Untuk privasi dan bypass pembatasan DNS, --socks5-hostname hampir selalu pilihan yang benar.
Tip
Aturan praktis: selalu gunakan --socks5-hostname kecuali ada alasan kuat untuk memakai --socks5. Menyerahkan DNS ke proxy berarti alamat yang benar-benar kalian tuju tidak bocor di jaringan lokal — sama seperti menelpon melalui operator yang tahu nomornya, bukan mengucapkannya di ruang publik.
--proxy-userBanyak proxy perusahaan meminta kredensial tersendiri, terpisah dari kredensial server tujuan. Opsi --proxy-user menangani hal ini:
curl -x http://proxy.corp:8080 \
--proxy-user "budi:sandirahasia" \
https://api.example.com/usersPerhatikan bahwa --proxy-user berbeda dari -u. -u dipakai untuk autentikasi ke server tujuan, sedangkan --proxy-user untuk autentikasi ke proxy. Mencampur keduanya adalah kesalahan klasik yang menghasilkan error 407 Proxy Authentication Required padahal kredensial sudah benar — hanya salah tempat.
--noproxyTidak semua lalu lintas harus melewati proxy. Host internal — seperti registry image, server metrics, atau API internal tim — sebaiknya diakses langsung agar lebih cepat dan tidak bergantung pada ketersediaan proxy. Opsi --noproxy menerima daftar pola host yang dipisahkan koma:
curl -x http://proxy.corp:8080 --noproxy "*.internal.example.com,10.0.0.0/8" \
https://internal.example.com/api/healthPola bisa berupa nama domain, wildcard, atau rentang CIDR. Nilai "*" menonaktifkan proxy untuk semua host. Kombinasi -x untuk sebagian host dan --noproxy untuk sebagian lainnya memberi kalian kendali granular: traffic keluar lewat proxy, traffic internal tetap lurus.
--resolveTerkadang kalian perlu memaksa curl menyambung ke alamat tertentu meskipun DNS publik menunjuk ke tempat lain — misalnya saat menguji sebelum cutover DNS, atau saat server staging hanya bisa diakses lewat IP tertentu.
curl --resolve api.example.com:443:10.0.0.5 \
https://api.example.com/healthFormatnya host:port:alamat. curl tetap menggunakan nama api.example.com di URL dan di SNI TLS, tapi koneksi TCP-nya menuju 10.0.0.5. Ini sangat berguna untuk menguji aplikasi terhadap server lain tanpa mengubah file hosts atau menunggu propagasi DNS.
--connect-toJika yang ingin diganti adalah host tujuan koneksi secara keseluruhan, gunakan --connect-to dengan format host:port:host_tujuan:port_tujuan:
curl --connect-to api.example.com:443:staging.internal:443 \
https://api.example.com/healthPerbedaannya halus tapi penting: --resolve hanya mengganti alamat IP yang disambung, sedangkan --connect-to mengganti host tujuan koneksi secara menyeluruh. --connect-to bahkan bisa mengganti skema — misalnya menyambungkan https ke host yang berbeda port — sehingga lebih fleksibel dalam skenario failover manual.
--interfaceUntuk mesin dengan banyak interface jaringan (beberapa NIC, VPN, atau bonding), curl bisa memilih dari interface mana koneksi berangkat:
curl --interface eth1 https://api.example.com/usersNilai --interface bisa berupa nama interface (eth1), alamat IP, atau nama host. Ini berguna saat ingin memaksa traffic melewati NIC tertentu — misalnya interface dengan bandwidth khusus atau rute jaringan tertentu.
Saat koneksi bermasalah, jangan menebak — lihat apa yang terjadi di lapisan bawah. Beberapa opsi debugging yang wajib diketahui:
-v (verbose) — menampilkan detail handshake, header request, dan header respons.--trace-ascii - — log detail setiap byte yang dikirim dan diterima, dalam bentuk teks.--connect-timeout — batas waktu untuk fase koneksi saja, sehingga script tidak menggantung.curl -v --connect-timeout 10 https://api.example.com/health 2>&1 | head -40Output -v akan memperlihatkan di tahap mana kegagalan terjadi: DNS gagal, TCP timeout, TLS handshake tertolak, atau respons HTTP yang aneh. Membaca output ini mengubah kalian dari "menebak-nebak" menjadi "melihat bukti" — keterampilan yang paling berharga saat jaringan berulah.
Important
Ingat urutan diagnosis: cek DNS (resolusi nama), cek TCP (port terbuka atau tidak), cek TLS (sertifikat), baru cek HTTP (status code). curl -v menunjukkan semuanya dalam satu urutan log. Jika gagal di DNS, jangan buang waktu memeriksa sertifikat.
Episode 9 melengkapi kalian dengan kendali atas jaringan: memilih proxy HTTP, HTTPS, dan SOCKS5 lewat -x dan --socks5-hostname, autentikasi proxy dengan --proxy-user, pengecualian per host dengan --noproxy, override DNS dengan --resolve, penyambungan ulang dengan --connect-to, pemilihan interface sumber, serta teknik troubleshooting dengan -v.
Inti yang perlu diingat: proxy mengontrol ke mana traffic pergi, networking flags mengontrol bagaimana traffic sampai. Keduanya bekerja berlapis — dan memahami lapisannya adalah setengah dari kemampuan troubleshooting.
Di episode 10 berikutnya kita akan membahas autentikasi dan sesi — skema Basic, Digest, NTLM, Bearer token, serta pengelolaan cookie untuk login session yang utuh. Sampai jumpa!