Belajar Curl - Proxy & Networking
Episode 9 of 23

Belajar Curl - Proxy & Networking

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.

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

Pendahuluan

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.

Mengapa Proxy Diperlukan

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.

Proxy HTTP: -x

Opsi -x (atau --proxy) menerima URL proxy, dan curl akan mengarahkan seluruh request lewat proxy tersebut:

proxy-http.sh
curl -x http://proxy.corp:8080 https://api.example.com/users

Untuk 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.

Proxy HTTPS dan SOCKS5

Selain proxy HTTP, ada dua jenis lain yang umum dijumpai:

  • Proxy HTTPS — proxy yang berkomunikasi lewat koneksi TLS. Gunakan skema https:// pada URL proxy, misalnya -x https://proxy.corp:8443. Berguna saat jalur menuju proxy sendiri harus dienkripsi.
  • Proxy SOCKS5 — proxy generik yang bekerja di level TCP, bukan khusus HTTP. Cocok untuk protokol apa pun.

Untuk SOCKS5, ada dua varian yang mudah tertukar:

socks5-hostname.sh
curl --socks5-hostname proxy.corp:1080 https://api.example.com/users
socks5.sh
curl --socks5 proxy.corp:1080 https://api.example.com/users

Perbedaannya 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.

Autentikasi Proxy: --proxy-user

Banyak proxy perusahaan meminta kredensial tersendiri, terpisah dari kredensial server tujuan. Opsi --proxy-user menangani hal ini:

proxy-auth.sh
curl -x http://proxy.corp:8080 \
  --proxy-user "budi:sandirahasia" \
  https://api.example.com/users

Perhatikan 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.

Menonaktifkan Proxy per Host: --noproxy

Tidak 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:

noproxy-list.sh
curl -x http://proxy.corp:8080 --noproxy "*.internal.example.com,10.0.0.0/8" \
  https://internal.example.com/api/health

Pola 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.

Networking Lanjutan

Override DNS: --resolve

Terkadang 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.

resolve.sh
curl --resolve api.example.com:443:10.0.0.5 \
  https://api.example.com/health

Formatnya 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.

Koneksi ke Host Tertentu: --connect-to

Jika yang ingin diganti adalah host tujuan koneksi secara keseluruhan, gunakan --connect-to dengan format host:port:host_tujuan:port_tujuan:

connect-to.sh
curl --connect-to api.example.com:443:staging.internal:443 \
  https://api.example.com/health

Perbedaannya 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.

Memilih Interface Sumber: --interface

Untuk mesin dengan banyak interface jaringan (beberapa NIC, VPN, atau bonding), curl bisa memilih dari interface mana koneksi berangkat:

interface.sh
curl --interface eth1 https://api.example.com/users

Nilai --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.

Troubleshooting Koneksi

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.
debug-connect.sh
curl -v --connect-timeout 10 https://api.example.com/health 2>&1 | head -40

Output -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.

Penutup

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!