Ini akan membantu orang menjawab Anda jika Anda memberikan beberapa informasi lebih lanjut. Anda di platform apa? Dari mana curl mendapatkan pengaturan proxy? Protokol apa (HTTP, FTP)? Jenis proxy apa (HTTP, SOCKS)? Apakah ini proxy transparan? Dapatkah Anda menunjukkan sekumpulan perintah yang tepat yang menunjukkan masalah Anda, bersama dengan keluarannya?
Brian Campbell
Jawaban:
55
Saya berasumsi curl membaca alamat proxy dari variabel lingkungan http_proxydan variabel harus menjaga nilainya. Kemudian di shell seperti bash, export http_proxy='';sebelum perintah (atau dalam skrip shell) akan mengubah nilainya untuk sementara.
(Lihat manual curl untuk semua variabel yang dilihatnya, di bawah ENVIRONMENTjudul.)
Jika Anda tidak ingin mengganti http_proxy berdasarkan kasus per kasus, Anda dapat mengonfigurasi domain untuk diabaikan dengan $ no_proxy, lalu buat alias curl Anda: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n
1
@jdebon Itu tidak bekerja jika Anda memiliki wildcard dalam variabel lingkungan itu, untuk alasan yang dijelaskan di bawah ini ( stackoverflow.com/a/17710829/2189128 ).
Jeff
@Jeff Ini bukan kasus saya, tapi tempat yang bagus, itu bisa menyebabkan masalah bagi orang lain. Terima kasih!
Sir4ur0n
245
Jika Anda curlsetidaknya versi 7.19.4, Anda bisa menggunakan --noproxybendera.
@RogerNg, jika manual atau penggunaan telah berubah sejak saya menjawab pertanyaan, silakan perbarui jawaban atau tulis sendiri. Namun demikian, pada saat penulisan, jawaban ini akurat untuk pertanyaan yang diajukan. Jika instalasi Anda tidak bekerja sesuai dengan spesifikasi, itu adalah masalah lain sepenuhnya.
Scott Offen
3
curl --noproxy stackoverflow.com stackoverflow.com Ini adalah pujian yang benar.
arulraj.net
2
Saya berasumsi bahwa --noproxyopsi tersebut tidak tersedia untuk versi curl yang lebih lama (mis. Yang digunakan di Centos / RHEL 5.x)
Dmitriusan
2
Berdasarkan dokumentasi, satu-satunya cara ini bisa bekerja --noproxy 127.0.0.1adalah jika stackoverflow.com berjalan di localhost.
dannysauer
71
Saya mengalami masalah yang sama karena saya menetapkan variabel lingkungan http_proxy dan https_proxy. Tetapi terkadang, saya menyambung ke jaringan lain dan perlu melewati proxy untuk sementara. Cara termudah untuk melakukannya (tanpa mengubah variabel lingkungan) adalah:
curl --noproxy '*' stackoverflow.com
Dari manual: "Satu-satunya karakter pengganti adalah satu karakter *, yang cocok dengan semua host, dan secara efektif menonaktifkan proxy."
Karakter * dikutip agar tidak diperluas secara keliru oleh shell.
Ini bukan "tembakan panjang" - ini cara yang tepat untuk melakukannya. Menurut halaman manual curl saya (7.15.5, yang tidak menampilkan opsi '--noproxy'), -x / - proxy <proxyhost [: port]> ... Opsi ini mengesampingkan variabel lingkungan yang ada yang menyetel proxy ke menggunakan. Jika ada variabel lingkungan yang menyetel proxy, Anda dapat menyetel proxy ke "" untuk menimpanya.
Rob Cranfill
5
Di '09, semuanya berjalan jauh.
Louis
5
+1, -x "" melakukannya. --noproxy dengan wildcard tidak berfungsi dengan bash saya meskipun saya mengutip "*"
Eugene
@ Eugene: Ini berfungsi di bash 4.3.11, dan harus dikutip.
Saya memiliki http_proxydan https_proxydidefinisikan. Saya tidak ingin membatalkan dan menyetel lagi lingkungan tersebut tetapi--noproxy '*' berfungsi dengan sempurna untuk saya.
Terima kasih. Saya telah menggaruk-garuk kepala mengapa curl tidak menghormati lingkungan lokal. Dan kemudian saya mencari .curlrc dan ada beberapa konfigurasi tambahan. Menambahkan no_proxy di sana dan berhasil!
n3o
1
Dalam kasus saya (macos, curl 7.54.0), saya memiliki set proxy di bawah ini~/.bash_profile
Dengan alasan yang tidak diketahui, versi curlini tidak dapat bekerja dengan variabel lingkungan NO_PRXYdan no_proxydengan benar, maka saya menghapus variabel lingkungan proxy satu per satu, hingga keduanya HTTPS_PROXYdan https_proxy.
unset HTTPS_PROXY
unset https_proxy
itu mulai bekerja dan dapat terhubung ke url internal
Jadi saya akan merekomendasikan untuk menghapus semua variabel proxy jika Anda ada di lingkungan Anda sebagai solusi sementara.
Jawaban:
Saya berasumsi curl membaca alamat proxy dari variabel lingkungan
http_proxy
dan variabel harus menjaga nilainya. Kemudian di shell seperti bash,export http_proxy='';
sebelum perintah (atau dalam skrip shell) akan mengubah nilainya untuk sementara.(Lihat manual curl untuk semua variabel yang dilihatnya, di bawah
ENVIRONMENT
judul.)sumber
unset http_proxy
ftp_proxy
. Saya rasa, berikut adalah daftar lengkap wiki.archlinux.org/index.php/proxy_settings .Jika Anda
curl
setidaknya versi7.19.4
, Anda bisa menggunakan--noproxy
bendera.Dari manual .
sumber
--noproxy
opsi tersebut tidak tersedia untuk versi curl yang lebih lama (mis. Yang digunakan di Centos / RHEL 5.x)--noproxy 127.0.0.1
adalah jika stackoverflow.com berjalan di localhost.Saya mengalami masalah yang sama karena saya menetapkan variabel lingkungan http_proxy dan https_proxy. Tetapi terkadang, saya menyambung ke jaringan lain dan perlu melewati proxy untuk sementara. Cara termudah untuk melakukannya (tanpa mengubah variabel lingkungan) adalah:
Dari manual: "Satu-satunya karakter pengganti adalah satu karakter *, yang cocok dengan semua host, dan secara efektif menonaktifkan proxy."
Karakter * dikutip agar tidak diperluas secara keliru oleh shell.
sumber
curl --noproxy "*" stackoverflow.com
Ini berfungsi dengan baik, setel string proxy ke ""
sumber
Tambahkan preferensi proxy Anda ke .curlrc
Ini membuat semua domain dev dan permintaan mesin lokal mengabaikan proxy.
sumber
.
.Tembakan panjang tapi coba setel proxy ke "" (string kosong) yang akan menggantikan pengaturan proxy sesuai dengan halaman manual.
sumber
Anda harus menggunakan
$no_proxy
variabel env (huruf kecil). Silakan lihat https://wiki.archlinux.org/index.php/proxy_settings untuk mengetahui contohnya.Juga, ada bug di curl sejak lama http://sourceforge.net/p/curl/bugs/185/ , mungkin Anda menggunakan versi curl kuno yang menyertakan bug ini.
sumber
Pertama, saya mencantumkan pengaturan proxy saat ini dengan
(harus seperti
http_proxy=http://wpad.local.machine.location:port number
)Kemudian saya mencoba pengaturan
yang memberikan pesan kesalahan ini:
Mencoba
dan berhasil!
PS! Ingatlah untuk menyetel http-proxy kembali ke pengaturan aslinya dengan
sumber
Saya memiliki
http_proxy
danhttps_proxy
didefinisikan. Saya tidak ingin membatalkan dan menyetel lagi lingkungan tersebut tetapi--noproxy '*'
berfungsi dengan sempurna untuk saya.sumber
Jawaban timpang tetapi: Ingatlah untuk memastikan tidak ada proxy yang disetel dalam
~/.curlrc
file (...).sumber
Dalam kasus saya (macos,
curl 7.54.0
), saya memiliki set proxy di bawah ini~/.bash_profile
Dengan alasan yang tidak diketahui, versi
curl
ini tidak dapat bekerja dengan variabel lingkunganNO_PRXY
danno_proxy
dengan benar, maka saya menghapus variabel lingkungan proxy satu per satu, hingga keduanyaHTTPS_PROXY
danhttps_proxy
.itu mulai bekerja dan dapat terhubung ke url internal
Jadi saya akan merekomendasikan untuk menghapus semua variabel proxy jika Anda ada di lingkungan Anda sebagai solusi sementara.
sumber
Curl saya tidak mengabaikan proxy di Ubuntu 12.04 sampai saya mengatur variabel lingkungan "no_proxy" (huruf kecil). Opsi --noproxy tidak tersedia.
sumber