Saat mengembangkan dan menguji API, sering kali ada kebutuhan untuk mengirim permintaan melalui server proxy. Ini mungkin diperlukan untuk menghindari batasan geografis, menguji perilaku API dari berbagai wilayah, memastikan anonimitas, atau bekerja dengan layanan yang memblokir IP pusat data. Dalam panduan ini, kita akan membahas cara mengatur proxy dengan benar di klien REST API populer dan menghindari kesalahan umum.
Kita akan melihat empat alat paling populer untuk bekerja dengan API: Postman (antarmuka grafis untuk sebagian besar pengembang), Insomnia (alternatif modern dengan UI yang nyaman), cURL (alat baris perintah klasik), dan HTTPie (klien CLI modern dengan sintaks yang mudah dibaca). Untuk setiap alat, kami akan memberikan contoh kode dan membahas fitur konfigurasi.
Jenis proxy yang cocok untuk bekerja dengan API
Sebelum mengatur proxy di klien API, penting untuk memahami jenis proxy yang cocok untuk tugas Anda. Klien REST API mendukung dua protokol utama: HTTP/HTTPS dan SOCKS5. Pilihan tergantung pada persyaratan API tertentu dan tingkat keamanan yang Anda butuhkan.
Proxy HTTP/HTTPS bekerja pada tingkat protokol HTTP dan sangat cocok untuk sebagian besar permintaan REST API. Mereka memahami struktur lalu lintas HTTP, dapat menyimpan cache respons, dan memodifikasi header. Proxy HTTPS juga mengenkripsi koneksi antara klien dan server proxy, yang penting saat mentransfer data sensitif, seperti kunci API atau token otorisasi.
Proxy SOCKS5 bekerja pada tingkat yang lebih rendah dan mentransfer semua jenis lalu lintas tanpa modifikasi. Mereka lebih lambat daripada proxy HTTP, tetapi memberikan anonimitas yang lebih baik dan cocok untuk situasi di mana API menggunakan protokol non-standar atau memerlukan transparansi penuh dari koneksi. SOCKS5 juga mendukung lalu lintas UDP, meskipun untuk REST API ini jarang diperlukan.
Rekomendasi: Untuk bekerja dengan sebagian besar API publik (GitHub, Stripe, Twilio, Google Maps), cukup gunakan proxy HTTP/HTTPS. Jika API memblokir permintaan dari IP pusat data, gunakan proxy residensial — mereka memiliki IP pengguna nyata dan lebih jarang terkena pemblokiran.
| Jenis Proxy | Protokol | Kecepatan | Kapan digunakan |
|---|---|---|---|
| Datacenter HTTP | HTTP/HTTPS | Sangat tinggi | Pengujian, pengembangan, API tanpa batasan geo |
| Residential HTTP | HTTP/HTTPS | Sedang | API dengan perlindungan terhadap bot, geo-targeting |
| Mobile HTTP | HTTP/HTTPS | Sedang | API mobile, media sosial |
| SOCKS5 | SOCKS5 | Rendah | Anonimitas maksimum, protokol non-standar |
Pengaturan proxy di Postman: pengaturan global dan lokal
Postman adalah alat grafis paling populer untuk bekerja dengan REST API, digunakan oleh jutaan pengembang. Ia mendukung dua cara untuk mengatur proxy: pengaturan global (berlaku untuk semua permintaan) dan pengaturan pada tingkat lingkungan (environment). Mari kita bahas kedua opsi secara rinci.
Pengaturan global proxy di Postman
Pengaturan global proxy berada di menu Settings (ikon roda gigi di sudut kanan atas). Cara ini nyaman ketika Anda ingin semua permintaan dari Postman selalu melalui satu server proxy yang sama. Berikut adalah instruksi langkah demi langkah:
- Buka Postman dan klik ikon roda gigi (Settings) di sudut kanan atas
- Pindah ke tab "Proxy"
- Aktifkan opsi "Add a custom proxy configuration"
- Pilih jenis proxy: HTTP, HTTPS, atau SOCKS5
- Masukkan alamat server proxy (misalnya:
proxy.example.com) - Tentukan port (biasanya 8080 untuk HTTP, 1080 untuk SOCKS5)
- Jika proxy memerlukan otentikasi, aktifkan "Proxy Auth" dan masukkan login/kata sandi
- Klik "Save" dan tutup jendela pengaturan
Setelah itu, semua permintaan dari Postman akan otomatis melalui proxy yang ditentukan. Fitur penting: Postman juga mengirim telemetri dan memeriksa pembaruan melalui proxy, yang dapat menciptakan lalu lintas tambahan. Jika Anda menggunakan proxy dengan batasan lalu lintas, ini perlu diperhatikan.
Pengaturan proxy melalui variabel lingkungan
Cara yang lebih fleksibel adalah menggunakan variabel lingkungan (Environments). Ini memungkinkan Anda untuk dengan cepat beralih antara berbagai proxy untuk proyek atau API yang berbeda. Buat lingkungan baru dan tambahkan variabel berikut:
PROXY_HOST = proxy.example.com
PROXY_PORT = 8080
PROXY_USER = your_username
PROXY_PASS = your_password
Kemudian di pengaturan global proxy, gunakan variabel ini alih-alih nilai spesifik: {{PROXY_HOST}} dan {{PROXY_PORT}}. Sekarang Anda dapat membuat beberapa lingkungan (misalnya, "Production Proxy", "Testing Proxy", "US Proxy") dan beralih di antara mereka dengan satu klik.
Menggunakan proxy sistem
Postman juga dapat menggunakan pengaturan proxy sistem operasi Anda. Untuk ini, di pengaturan Proxy, pilih opsi "Use System Proxy". Ini nyaman jika Anda sudah mengatur proxy di tingkat OS (misalnya, melalui pengaturan Windows atau macOS) dan ingin agar Postman menggunakan pengaturan yang sama dengan browser.
Penting: Saat menggunakan proxy sistem, Postman mungkin mengabaikan pengaturan untuk localhost dan 127.0.0.1. Jika Anda menguji API lokal melalui proxy, gunakan konfigurasi khusus alih-alih sistem.
Konfigurasi proxy di Insomnia
Insomnia adalah alternatif modern untuk Postman dengan antarmuka yang bersih dan sumber terbuka. Pengaturan proxy di Insomnia sedikit berbeda dari Postman dan memerlukan pengeditan file konfigurasi atau penggunaan variabel lingkungan. Mari kita bahas kedua cara tersebut.
Pengaturan melalui variabel lingkungan
Cara termudah untuk mengatur proxy di Insomnia adalah dengan menggunakan variabel lingkungan standar HTTP_PROXY dan HTTPS_PROXY. Insomnia secara otomatis membaca variabel ini dari sistem. Atur mereka sebelum menjalankan Insomnia:
Linux/macOS:
export HTTP_PROXY="http://username:password@proxy.example.com:8080"
export HTTPS_PROXY="http://username:password@proxy.example.com:8080"
insomnia
Windows (PowerShell):
$env:HTTP_PROXY = "http://username:password@proxy.example.com:8080"
$env:HTTPS_PROXY = "http://username:password@proxy.example.com:8080"
insomnia
Perhatikan format URL: bahkan untuk proxy HTTPS, skema http:// digunakan, bukan https://. Ini adalah kesepakatan standar untuk variabel lingkungan proxy. Jika proxy tidak memerlukan otentikasi, URL akan lebih pendek: http://proxy.example.com:8080.
Pengaturan proxy SOCKS5
Untuk proxy SOCKS5, gunakan variabel lingkungan ALL_PROXY:
export ALL_PROXY="socks5://username:password@proxy.example.com:1080"
Insomnia mendukung SOCKS5, tetapi tidak semua versi menangani otentikasi SOCKS5 dengan benar. Jika Anda mengalami masalah dengan SOCKS5 yang memerlukan otentikasi, coba gunakan proxy HTTP atau perbarui Insomnia ke versi terbaru.
Pengaturan melalui file konfigurasi
Untuk pengaturan proxy yang permanen, Anda dapat mengedit file konfigurasi Insomnia. Lokasi file tergantung pada sistem operasi:
- Windows:
%APPDATA%\Insomnia\config.json - macOS:
~/Library/Application Support/Insomnia/config.json - Linux:
~/.config/Insomnia/config.json
Buka file di editor teks dan tambahkan bagian proxy:
{
"proxy": {
"http": "http://username:password@proxy.example.com:8080",
"https": "http://username:password@proxy.example.com:8080"
}
}
Setelah mengedit, restart Insomnia. Pengaturan proxy akan diterapkan ke semua permintaan secara otomatis.
Menggunakan proxy di cURL: contoh perintah
cURL adalah alat baris perintah klasik untuk bekerja dengan HTTP, yang terpasang di hampir semua sistem mirip Unix dan Windows 10+. Ia mendukung proxy melalui parameter -x atau --proxy. Mari kita lihat berbagai skenario penggunaan.
Penggunaan dasar proxy HTTP
Contoh paling sederhana menggunakan proxy HTTP tanpa otentikasi:
curl -x http://proxy.example.com:8080 https://api.example.com/users
Parameter -x menunjukkan alamat dan port server proxy. cURL secara otomatis akan menentukan bahwa ini adalah proxy HTTP dan mengatur koneksi. Jika Anda ingin secara eksplisit menentukan protokol, gunakan URL lengkap:
curl --proxy http://proxy.example.com:8080 https://api.example.com/users
Proxy dengan otentikasi
Jika proxy memerlukan otentikasi dengan login dan kata sandi, tambahkan mereka ke URL proxy atau gunakan parameter -U:
# Metode 1: login dan kata sandi dalam URL
curl -x http://username:password@proxy.example.com:8080 https://api.example.com/users
# Metode 2: parameter -U (lebih aman, tidak disimpan dalam riwayat perintah)
curl -x http://proxy.example.com:8080 -U username:password https://api.example.com/users
Metode kedua lebih disukai, karena login dan kata sandi tidak akan masuk ke dalam riwayat perintah shell. Untuk keamanan lebih, Anda dapat hanya menyebutkan login, dan cURL akan meminta kata sandi secara interaktif:
curl -x http://proxy.example.com:8080 -U username https://api.example.com/users
# cURL akan meminta kata sandi: Enter proxy password for user 'username':
Menggunakan proxy SOCKS5
Untuk proxy SOCKS5, secara eksplisit tentukan protokol dalam URL:
# SOCKS5 tanpa otentikasi
curl -x socks5://proxy.example.com:1080 https://api.example.com/users
# SOCKS5 dengan otentikasi
curl -x socks5://username:password@proxy.example.com:1080 https://api.example.com/users
# SOCKS5h (resolusi DNS melalui proxy)
curl -x socks5h://proxy.example.com:1080 https://api.example.com/users
Perbedaan antara socks5:// dan socks5h://: pada kasus pertama, resolusi DNS terjadi secara lokal (di mesin Anda), pada kasus kedua — melalui server proxy. Gunakan socks5h:// jika Anda ingin sepenuhnya menyembunyikan permintaan DNS dari penyedia Anda.
Permintaan POST melalui proxy
Proxy berfungsi sama untuk semua metode HTTP. Contoh permintaan POST dengan data JSON melalui proxy:
curl -x http://proxy.example.com:8080 \
-X POST \
-H "Content-Type: application/json" \
-d '{"name":"John","email":"john@example.com"}' \
https://api.example.com/users
Untuk mengirim file, gunakan parameter -F:
curl -x http://proxy.example.com:8080 \
-X POST \
-F "file=@document.pdf" \
-F "description=Important document" \
https://api.example.com/upload
Menggunakan variabel lingkungan
Alih-alih menentukan proxy di setiap perintah, Anda dapat menggunakan variabel lingkungan. cURL secara otomatis membaca http_proxy, https_proxy, dan all_proxy:
# Atur variabel lingkungan
export http_proxy="http://username:password@proxy.example.com:8080"
export https_proxy="http://username:password@proxy.example.com:8080"
# Sekarang semua perintah cURL secara otomatis menggunakan proxy
curl https://api.example.com/users
# Nonaktifkan proxy untuk perintah tertentu
curl --noproxy "*" https://api.example.com/users
Parameter --noproxy memungkinkan Anda untuk mengecualikan domain tertentu dari penggunaan proxy. Misalnya, untuk tidak menggunakan proxy untuk localhost dan domain internal:
export no_proxy="localhost,127.0.0.1,.internal.company.com"
Pengaturan proxy di HTTPie
HTTPie adalah alternatif modern untuk cURL dengan sintaks yang mudah dibaca dan output berwarna. Ini sangat nyaman untuk bekerja interaktif dengan API di terminal. HTTPie mendukung proxy melalui parameter --proxy atau variabel lingkungan.
Penggunaan dasar proxy
Sintaks HTTPie untuk proxy sedikit berbeda dari cURL. Anda perlu menentukan protokol dan URL proxy secara terpisah:
# Proxy HTTP
http --proxy=http:http://proxy.example.com:8080 \
--proxy=https:http://proxy.example.com:8080 \
GET https://api.example.com/users
# Bentuk singkat (jika proxy sama untuk HTTP dan HTTPS)
http --proxy=all:http://proxy.example.com:8080 GET https://api.example.com/users
Format: --proxy=protocol:proxy_url. Untuk permintaan HTTPS, biasanya digunakan proxy HTTP (bukan HTTPS), ini adalah perilaku standar.
Proxy dengan otentikasi
Untuk otentikasi, tambahkan login dan kata sandi ke URL proxy:
http --proxy=all:http://username:password@proxy.example.com:8080 \
GET https://api.example.com/users
HTTPie juga mendukung parameter --proxy-auth untuk secara lebih eksplisit menunjukkan kredensial, tetapi di versi terbaru parameter ini dianggap usang, dan disarankan untuk menyertakan otentikasi dalam URL.
Proxy SOCKS5 di HTTPie
HTTPie mendukung proxy SOCKS5 mulai versi 2.0.0. Pastikan Anda memiliki versi terbaru:
# Periksa versi HTTPie
http --version
# Perbarui HTTPie melalui pip
pip install --upgrade httpie
# Menggunakan proxy SOCKS5
http --proxy=all:socks5://proxy.example.com:1080 GET https://api.example.com/users
Untuk SOCKS5 dengan otentikasi, Anda perlu menginstal pustaka tambahan pysocks:
pip install pysocks
http --proxy=all:socks5://username:password@proxy.example.com:1080 \
GET https://api.example.com/users
Permintaan POST dan pengiriman data
HTTPie memiliki sintaks yang nyaman untuk permintaan POST. Contoh mengirim JSON melalui proxy:
# POST dengan JSON (HTTPie secara otomatis menentukan Content-Type)
http --proxy=all:http://proxy.example.com:8080 \
POST https://api.example.com/users \
name="John Doe" \
email="john@example.com" \
age:=30
# Mengirim file
http --proxy=all:http://proxy.example.com:8080 \
POST https://api.example.com/upload \
file@document.pdf \
description="Important document"
Perhatikan sintaksnya: key=value untuk string, key:=value untuk angka dan nilai boolean, key@file untuk file.
Menggunakan variabel lingkungan
Seperti cURL, HTTPie membaca variabel lingkungan standar http_proxy dan https_proxy:
export http_proxy="http://username:password@proxy.example.com:8080"
export https_proxy="http://username:password@proxy.example.com:8080"
# Sekarang semua perintah secara otomatis menggunakan proxy
http GET https://api.example.com/users
Untuk menonaktifkan proxy sementara, gunakan parameter --proxy= (nilai kosong):
http --proxy= GET https://api.example.com/users
Otentikasi proxy: login dan kata sandi
Sebagian besar layanan proxy komersial memerlukan otentikasi untuk melindungi dari penggunaan yang tidak sah. Ada dua metode utama otentikasi: Otentikasi Dasar (login/kata sandi) dan Daftar Putih IP (ikatan ke alamat IP). Mari kita bahas fitur masing-masing metode dan bagaimana cara mengaturnya dengan benar di klien API.
Otentikasi Dasar (login dan kata sandi)
Otentikasi Dasar adalah metode yang paling umum. Server proxy meminta login dan kata sandi pada setiap koneksi. Kredensial dikirim dalam header Proxy-Authorization dalam format Base64. Semua klien API modern secara otomatis membentuk header ini jika Anda menyertakan login dan kata sandi dalam URL proxy.
Format URL dengan otentikasi:
protocol://username:password@proxy_host:proxy_port
Contoh untuk berbagai protokol:
# Proxy HTTP
http://user123:pass456@proxy.example.com:8080
# Proxy HTTPS (menggunakan format yang sama)
http://user123:pass456@proxy.example.com:8080
# Proxy SOCKS5
socks5://user123:pass456@proxy.example.com:1080
Keamanan: Jangan pernah menyimpan kata sandi proxy dalam bentuk terbuka di skrip atau file konfigurasi yang masuk ke sistem kontrol versi (Git). Gunakan variabel lingkungan atau file dengan hak akses terbatas (chmod 600).
Daftar Putih IP (ikatan ke IP)
Beberapa penyedia proxy menawarkan otentikasi berdasarkan alamat IP. Dalam hal ini, Anda menambahkan IP Anda ke daftar putih di panel kontrol proxy, dan server hanya mengizinkan koneksi dari IP tersebut tanpa login dan kata sandi. Ini lebih nyaman dan aman, karena tidak perlu mengirim kredensial di setiap permintaan.
Saat menggunakan Daftar Putih IP, format URL proxy menjadi lebih sederhana:
# Tanpa login dan kata sandi
http://proxy.example.com:8080
# Contoh di cURL
curl -x http://proxy.example.com:8080 https://api.example.com/users
Kekurangan metode ini adalah jika IP Anda dinamis (berubah saat terhubung kembali ke internet), Anda harus memperbarui daftar putih setiap kali. Untuk server dengan IP statis, ini adalah pilihan yang ideal.
Karakter khusus dalam kata sandi
Jika kata sandi proxy mengandung karakter khusus (@, :, /, ?), mereka perlu dikodekan dalam format URL encoding (percent encoding). Misalnya:
| Simbol | URL-encoding | Contoh |
|---|---|---|
| @ | %40 | pass@123 → pass%40123 |
| : | %3A | pass:word → pass%3Aword |
| / | %2F | pass/123 → pass%2F123 |
| ? | %3F | pass?123 → pass%3F123 |
| # | %23 | pass#123 → pass%23123 |
| spasi | %20 | my pass → my%20pass |
Contoh penggunaan kata sandi dengan karakter khusus:
# Kata sandi asli: P@ss:w0rd/123
# Kata sandi yang dikodekan: P%40ss%3Aw0rd%2F123
curl -x http://username:P%40ss%3Aw0rd%2F123@proxy.example.com:8080 \
https://api.example.com/users
Untuk pengkodean otomatis, Anda dapat menggunakan alat online URL encoder atau perintah di Python:
python3 -c "import urllib.parse; print(urllib.parse.quote('P@ss:w0rd/123'))"
# Output: P%40ss%3Aw0rd%2F123
Memecahkan masalah dan kesalahan umum
Saat bekerja dengan proxy di klien API, sering kali muncul kesalahan umum. Mari kita bahas masalah yang paling umum dan cara menyelesaikannya.
Kesalahan "407 Proxy Authentication Required"
Kesalahan ini berarti server proxy memerlukan otentikasi, tetapi kredensial tidak diberikan atau salah. Solusi:
- Periksa keakuratan login dan kata sandi di panel kontrol penyedia proxy
- Pastikan karakter khusus dalam kata sandi telah dikodekan (lihat bagian di atas)
- Periksa format URL:
http://username:password@host:port - Jika menggunakan Daftar Putih IP, pastikan IP Anda saat ini ditambahkan ke daftar putih
Contoh diagnosis di cURL dengan output terperinci:
curl -v -x http://username:password@proxy.example.com:8080 https://api.example.com/users
# Flag -v (verbose) akan menunjukkan semua header dan proses otentikasi
Kesalahan "Connection timeout" atau "Failed to connect"
Kesalahan ini terjadi ketika klien API tidak dapat membuat koneksi dengan server proxy. Kemungkinan penyebab:
- Alamat atau port server proxy salah — periksa pengaturan dengan penyedia
- Server proxy tidak tersedia atau kelebihan beban — coba server lain dari daftar
- Firewall Anda memblokir koneksi keluar ke port proxy
- Penyedia proxy memblokir IP Anda karena melebihi batas
Untuk diagnosis, coba sambungkan ke proxy secara langsung melalui telnet atau nc:
# Memeriksa ketersediaan proxy
telnet proxy.example.com 8080
# atau
nc -zv proxy.example.com 8080
# Jika koneksi tidak dapat dibuat, masalah ada di jaringan atau server proxy tidak tersedia
Kesalahan "SSL certificate problem"
Saat menggunakan proxy HTTPS, mungkin ada masalah dengan verifikasi sertifikat SSL. Ini terutama berlaku untuk proxy MITM (Man-in-the-Middle) yang mencegat dan mendekripsi lalu lintas HTTPS. Solusi:
- Di cURL, gunakan flag
-katau--insecureuntuk menonaktifkan verifikasi sertifikat (hanya untuk pengujian!) - Di Postman, nonaktifkan "SSL certificate verification" di Settings → General
- Instal sertifikat root proxy di sistem (untuk lingkungan produksi)
# Nonaktifkan verifikasi sertifikat SSL