melakukan permintaan HTTP dengan cURL (menggunakan PROXY)

451

Saya punya alamat proxy ini: 125.119.175.48:8909

Bagaimana saya bisa melakukan permintaan HTTP menggunakan seperti CURL curl http://www.example.com, tetapi menentukan alamat proxy jaringan saya?

pengguna873286
sumber

Jawaban:

411

Cara umum:

export http_proxy=http://your.proxy.server:port/

Kemudian Anda dapat terhubung melalui proxy dari (banyak) aplikasi.

Dan, sesuai komentar di bawah, untuk https:

export https_proxy=https://your.proxy.server:port/
udara
sumber
76
Saat Anda perlu mem
phatblat
18
Dari halaman manual, variabel lingkungan dapat ditentukan dalam huruf kecil atau huruf besar. Versi huruf kecil memiliki prioritas. http_proxy adalah pengecualian karena hanya tersedia dalam huruf kecil. Menggunakan variabel lingkungan untuk mengatur proxy memiliki efek yang sama dengan menggunakan opsi --proxy.
Kapten Lepton
@ BipinVayalu, apa yang ingin Anda periksa? Dengan cara ini, apa yang saya jelaskan di atas, klien menggunakan proxy "cara langsung", tidak transparan. Jadi, proksi memberikan jawaban HTTP standar (termasuk kode HTTP). Jika Anda mengekspor variabel lingkungan http_proxy yang salah (mis. Port buruk ...), klien tidak dapat terhubung ke sana, dan itu memberikan pesan kesalahan: "Peringatan! Tidak dapat terhubung ke host jarak jauh!", Atau sesuatu yang serupa - coba saja :)
tayang
15
Jika Anda memeriksa kode sumber curl, Anda akan melihat di url.c (baris 4337 dalam verion 7.39) mereka memeriksa versi huruf kecil dan jika mereka tidak dapat menemukannya, periksa huruf besar.
Raistmaj
1
Sebagian besar pengguna mengirimi saya koreksi, sekarang saya membagikannya. Jika Anda ingin menggunakan koneksi HTTPS melalui proxy, maka Anda harus melakukan ini: export https_proxy = your.proxy.server: port Catatan, bahwa ada proto "http" dalam skema URL, bukan httpS!
airween
662

Dari man curl:

-x, --proxy <[protocol://][user:password@]proxyhost[:port]>

     Use the specified HTTP proxy. 
     If the port number is not specified, it is assumed at port 1080.
Karl Barker
sumber
curl: (7) tidak dapat terhubung ke host curl: (7) tidak dapat terhubung ke host
user873286
Saya mendapatkan kesalahan di atas ketika saya menjalankan perintah ini: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286
61
"-x, --proxy" berarti keduanya dapat digunakan. Perintah harus berupa "curl -x 122.72.2.200:80 mysite.com/test.php?id=1 " atau "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard
8
Dokumen dikutip dengan benar seperti di atas, namun, pengguna dan kata sandi harus dinyatakan berbeda:-x user:password@proxyhost:port
Ed Chapel
Terima kasih atas jawaban terbaiknya!
haotang
128

Solusi di atas mungkin tidak berfungsi dengan beberapa versi curl yang saya coba sendiri (curl 7.22.0). Tetapi yang berhasil bagi saya adalah:

curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

Semoga ini bisa menyelesaikan masalah dengan lebih baik!

Amar
sumber
Berlari ke masalah yang sama, ikal yang dikirim oleh Debian Wheezy masih tidak mendukung trik env
hyperknot
Dapatkan ini sebagai gantinya[1] 4812
Aminah Nuraini
80

Berhati-hatilah bahwa jika Anda menggunakan proxy SOCKS, alih-alih proxy HTTP / HTTPS, Anda harus menggunakan --socks5sakelar:

curl --socks5 125.119.175.48:8909 http://example.com/

Anda juga dapat menggunakan --socks5-hostnamealih-alih --socks5menyelesaikan DNS di sisi proxy.

Filipe Correia
sumber
6
Ini tidak berhasil untuk saya, tetapi menggunakan --socks5-hostnametidak.
Michał Rybak
2
@ MichałRybak yang akan bekerja sama tetapi menyelesaikan DNS di sisi proxy. Lihat halaman manual untuk lebih jelasnya.
Filipe Correia
3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339sepertinya bekerja dengan baik untuk saya. Apakah --proxyopsi dalam beberapa cara lebih rendah daripada --socks5ketika menggunakan proxy socks5?
@ user993683 Tergantung pada versi. --proxymungkin apa yang Anda inginkan, sekarang, tetapi itu tidak selalu didukung. Perhatikan juga socks5://dan socks5h://lakukan resolusi hostname (DNS) sebelum dan sesudah menyambungkan ke proxy.
Michael - Di mana Clay Shirky
51

sebagai saran untuk airween, ide bagus lainnya adalah menambahkan ini ke .bashrc Anda, sehingga Anda dapat beralih dari lingkungan yang tidak proksi ke proksi:

alias proxyon="export http_proxy='http://YOURPROXY:YOURPORT';export https_proxy='http://YOURPROXY:YOURPORT'"
alias proxyoff="export http_proxy='';export https_proxy=''"

WHERE YOURPROXY: YOURPORT persis seperti itu, ip dan port proxy Anda :-).

Kemudian, cukup lakukan

proxyon

sistem Anda akan mulai menggunakan proxy, dan sebaliknya dengan:

proxyoff
Alejandro Moreno
sumber
34

gunakan yang berikut ini

curl -I -x 192.168.X.X:XX http://google.com

192.168.X.X:XX masukkan ip dan port server proxy Anda.

-v mode verbose itu akan memberikan rincian lebih lanjut termasuk header dan respons.

13rk
sumber
2
Ini seharusnya jawabannya. Tidak semua orang ingin menentukan variabel global (ekspor) untuk setiap permintaan HTTP yang dilakukan oleh setiap klien HTTP di host Anda. Opsi ini memberikan lebih banyak fleksibilitas, IMHO.
ivanleoncz
Ini sangat berguna ketika Anda mencoba proksi yang berbeda terhadap suatu url. Terima kasih.
redAce
30

kamu bisa menggunakan :

curl http://www.example.com --proxy http://125.119.175.48:8909

seperti yang dijelaskan oleh Karl

smitkpatel
sumber
26
"seperti yang dijelaskan oleh Karl", yang berarti jawaban ini tidak lebih baik daripada salinan jawaban itu.
Raedwald
26

Saya suka menggunakan ini untuk mendapatkan IP di mana saya terlihat

curl -x http://proxy_server:proxy_port https://api.ipify.org?format=json && echo

Semoga ini bisa membantu seseorang.

bmetge
sumber
19

Untuk curlAnda dapat mengonfigurasi proxy di file ~/.curlrc( _curlrcpada Windows) Anda dengan menambahkan proxynilai, sintaksnya adalah:

proxy = http://username:password@proxy-host:port
kenorb
sumber
Itu dia! Mengkonfigurasi pengaturan proxy beberapa tahun lalu dalam file itu dan bertanya-tanya hari ini, mengapa curl tidak berfungsi lagi sekarang alamat proxy berubah dan env vars semuanya diatur dengan benar. Terima kasih untuk itu!
emale
15

Hanya meringkas semua jawaban yang disebutkan:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>
M. Mashaye
sumber
8

Dengan proxy dengan otentikasi saya menggunakan:

curl -x <protocol>://<user>:<password>@<host>:<port> --proxy-anyauth <url>

karena, saya tidak tahu mengapa curl tidak menggunakan / menangkap http [s] _proxy variabel lingkungan.

Pedro R. Sánchez A.
sumber
6
C:\Desktop>curl --head https://www.google.com/ --proxy 1.1.1.1:8080
Debashish Saha
sumber
6
Pertimbangkan untuk menambahkan penjelasan pada solusi Anda.
Pochmurnik
3

Anda tidak perlu mengekspor http[s]_proxyvariabel shell jika Anda hanya mengatur proxy untuk perintah satu kali. misalnya

http_proxy=http://your.proxy.server:port curl http://www.example.com

Yang mengatakan, saya lebih suka curl -xjika saya tahu saya akan selalu menggunakan proxy.

terlalu banyak berpikir
sumber
2

Bergantung pada tempat kerja Anda, Anda mungkin juga perlu menentukan -katau --insecureopsi untuk ikal agar dapat melewati masalah potensial dengan sertifikat CA.

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>
Matt Legler
sumber
1
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

Ini berfungsi dengan baik untuk saya, kesalahan datang karena curl perlu mengatur proxy

Ingat mengganti proxy dengan proxy Anda, milikku, "contoh" adalah http://10.1.1.50:8080/ .

IbarMario
sumber
0

Dalam hal proxy menggunakan proxy otomatis dengan file PAC. Kami dapat menemukan proksi yang sebenarnya dari javascript dari URL PAC.

Dan jika proxy memerlukan otentikasi, pertama-tama kita dapat menggunakan browser web normal untuk mengakses situs web yang akan mempromosikan dialog otentikasi. Setelah otentikasi, kita dapat menggunakan wireshark untuk menangkap paket http yang dikirim ke server proxy, dari paket http, kita bisa mendapatkan token auth dari header http: Proxy-Authorization

Kemudian kita dapat mengatur variabel lingkungan http_proxy dan juga menyertakan token auth di header http: Proxy-Authorization

ekspor http_proxy = http: // proxyserver: port

curl -H "Proxy-Otorisasi: xxxx" http: // targetURL

Jianwu Chen
sumber