Bagaimana cara membuat curl mengabaikan proxy?


106

Bagaimana cara membuat curl mengabaikan proxy? Menyetel $ NO_PROXY sepertinya tidak berhasil untuk saya.


1
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.)


19
Atau sederhananyaunset http_proxy
joelittlejohn

Satu catatan: ada variabel * _proxy env lain seperti ftp_proxy. Saya rasa, berikut adalah daftar lengkap wiki.archlinux.org/index.php/proxy_settings .
Dmitriusan

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.

curl --noproxy "*" http://www.stackoverflow.com

Dari manual .


5
curl: opsi --noproxy: tidak diketahui
Roger Ng

2
@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.


12
catatan untuk pengguna furture: Bash memperluas file lokal jika saya tidak mengutip * jadicurl --noproxy "*" stackoverflow.com
Adam

Sangat berguna & perlu dicatat bahwa ini juga tampaknya mengabaikan proxy (SOCKS) yang telah saya tetapkan di file .curlrc saya
MatzFan

1
Ini adalah jawaban yang berhasil untuk saya menggunakan curl versi 7.22.0
xpereta

23

Ini berfungsi dengan baik, setel string proxy ke ""

curl -x "" http://www.stackoverflow.com

11

Tambahkan preferensi proxy Anda ke .curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

Ini membuat semua domain dev dan permintaan mesin lokal mengabaikan proxy.


1
//, Ini adalah satu-satunya yang menampilkan contoh dengan nilai dengan nilai DNS yang dimulai dengan ..
Nathan Basanese

Jangan bingung dengan variabel env no_proxy (dengan garis bawah)
Simon Perepelitsa

7

Tembakan panjang tapi coba setel proxy ke "" (string kosong) yang akan menggantikan pengaturan proxy sesuai dengan halaman manual.


2
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.
karatedog


6

Pertama, saya mencantumkan pengaturan proxy saat ini dengan

env | sort | less

(harus seperti http_proxy=http://wpad.local.machine.location:port number)

Kemudian saya mencoba pengaturan

export http_proxy=";" 

yang memberikan pesan kesalahan ini:

curl: (5) Couldn't resolve proxy ';'

Mencoba

export http_proxy="" && curl http://servername:portnumber/destinationpath/ -d 55

dan berhasil!

PS! Ingatlah untuk menyetel http-proxy kembali ke pengaturan aslinya dengan

export http_proxy=http://wpad.local.machine.location:port number

6

Saya memiliki http_proxydan https_proxydidefinisikan. Saya tidak ingin membatalkan dan menyetel lagi lingkungan tersebut tetapi --noproxy '*' berfungsi dengan sempurna untuk saya.

curl --noproxy '*' -XGET 172.17.0.2:9200
{
  "status" : 200,
  "name" : "Medusa",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.0",
    "build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92",
    "build_timestamp" : "2015-03-23T14:30:58Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

1

Jawaban timpang tetapi: Ingatlah untuk memastikan tidak ada proxy yang disetel dalam ~/.curlrcfile (...).


1
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

$ env |grep -i proxy |cut -d = -f1|sort
FTP_PROXY
HTTPS_PROXY
HTTP_PROXY
NO_PROXY
PROXY
ftp_proxy
http_proxy
https_proxy
no_proxy

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.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

-1

Curl saya tidak mengabaikan proxy di Ubuntu 12.04 sampai saya mengatur variabel lingkungan "no_proxy" (huruf kecil). Opsi --noproxy tidak tersedia.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.