Mengapa curl Mengabaikan HTTP_PROXY
Pahami pengecualian HTTP_PROXY yang disengaja oleh curl, variabel per protokol, ALL_PROXY, dan cara membuat pengujian proksi melalui lingkungan lebih terprediksi.
Untuk tujuan HTTP, tetapkan http_proxy dengan huruf kecil. curl sengaja mengabaikan HTTP_PROXY dengan huruf besar. Dalam shell POSIX:
http_proxy=http://127.0.0.1:8080 curl http://example.com/
https_proxy=http://127.0.0.1:8080 curl https://example.com/Penetapan ini hanya berlaku untuk perintah tepat setelahnya. Ganti alamat layanan yang mendengarkan pada contoh dengan proksi Anda; untuk membandingkan endpoint publik, pilih kandidat dari daftar proksi HTTP. Variabel https_proxy memilih rute untuk tujuan HTTPS; nilai dengan http:// tetap berarti proksi HTTP biasa yang dapat membuat terowongan ke tujuan. PowerShell dan shell perintah Windows menggunakan sintaks penetapan yang berbeda.
Mengapa penulisan huruf besar ini berbahaya
Lingkungan CGI dapat mengubah header permintaan masuk menjadi variabel HTTP_ dengan huruf besar. Karena itu, header bernama Proxy dapat menjadi HTTP_PROXY. Memercayainya sebagai konfigurasi koneksi keluar akan membiarkan data permintaan memilih proksi. Persyaratan huruf kecil pada curl menghindari pemetaan ini; pengecualian tersebut tidak berlaku secara identik untuk HTTPS dan variabel protokol lainnya.
Jika perubahan variabel tidak mengubah rute
Cari variabel khusus protokol terlebih dahulu, lalu variabel cadangan ALL_PROXY. Aturan NO_PROXY yang cocok dapat melewati proksi. Varian huruf kecil dan definisi yang saling bersaing juga berpengaruh. Perulangan shell mirip Unix ini melaporkan keberadaan tanpa mencetak nilai yang mungkin memuat kredensial:
for name in http_proxy HTTP_PROXY https_proxy HTTPS_PROXY all_proxy ALL_PROXY no_proxy NO_PROXY; do
if printenv "$name" >/dev/null; then
printf '%s is set\n' "$name"
fi
donePeriksa definisi yang tercantum secara lokal. Jika suatu definisi muncul kembali, periksa konfigurasi shell peluncur, layanan, IDE, kontainer, atau CI. Keberadaan mengidentifikasi kemungkinan masukan; bukan menunjukkan nilai mana yang diutamakan.
Untuk memisahkan satu permintaan dari pilihan proksi tersebut, tentukan endpoint sekaligus daftar pengecualian kosong:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/Untuk perbandingan langsung yang diizinkan:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Perintah ini membantu membedakan rute yang diwarisi dari kegagalan konektivitas. Baca hasil pengujian proksi tahap demi tahap sebelum mengubah lebih banyak pengaturan lingkungan. Terapkan aturan variabel curl pada curl; runtime aplikasi sendiri dapat menemukan dan menggabungkan proksi dengan cara berbeda.