Cara menyertakan karakter '&' dalam pernyataan bash curl

100

Saya mencoba menggunakan curl in bash untuk mengunduh halaman web, tetapi &simbol di URL tidak ditafsirkan sebagai karakter seperti yang saya inginkan. Adakah ide tentang bagaimana saya bisa meyakinkan pesta bahwa simbol &itu hanya karakter yang membosankan dan tidak ada yang istimewa?

Chernoff
sumber
Lihatlah topik berikut ini akan membantu Anda - stackoverflow.com/questions/2067969/…
morgents
Saya sudah mencoba mengganti &simbol dengan \&, '&', "&", ^&tapi belum mampu untuk mendapatkan URL untuk mengevaluasi dengan benar. Sebenarnya, '&'berfungsi ketika saya menjalankan perintah curl dari Terminal.app, tetapi gagal ketika saya menempatkannya di skrip bash, membungkusnya dalam satu lingkaran dan menjalankannya.
Chernoff

Jawaban:

125

Menempatkan seluruh URL di dalam tanda kutip ganda akan mengatasi masalah Anda.

mjuarez.dll
sumber
9
tanda kutip tunggal mungkin lebih baik, kecuali ada kebutuhan untuk menyelesaikan variabel.
jpm
Ketika saya menggunakan tanda kutip di seluruh URL, ekspresi ${i}tidak mengembalikan nilai.
Chernoff
2
Dalam kasus saya, tanda kutip ganda gagal sementara tanda kutip tunggal berfungsi dengan baik.
abeboparebop
3
Harap berhati-hati program apa yang digunakan untuk mengetik tanda kutip. Saat sedang terburu-buru mengedit skrip shell, saya menggunakan program pengeditan teks. Itu menempatkan tanda kutip miring, bukan tanda kutip ganda lurus. Ini benar-benar mengacaukan naskah dan membuat masalah sulit ditemukan!
David
41
curl "http://www.example.com?m=method&args=1"

Apakah Anda menggunakan & sebagai pembatas untuk GET URL? Atau ada dalam sepotong data?

Jika ada dalam data Anda harus menyandikannya ke karakter HTML, jika tidak, beri tanda kutip.

Pengkodean untuk &harus ada %26di URL.

curl "http://www.example.com?m=this%26that
Matt Clark
sumber
Saya menggunakan &simbol sebagai bagian dari data, hampir persis seperti yang Anda tunjukkan. Tangkapannya adalah, alih-alih nilai numerik yang saya gunakan ${i}. Jadi saya ingin http://www.example.com?m=method&args=${i}mengevaluasi sebagai URL.
Chernoff
3
Cara saya menunjukkan URL menggunakan '&' sebagai pembatas untuk variabel GET, jadi sekarang saya bingung, di $ [i] Anda memiliki data yang berisi '&'? Jika demikian, Anda perlu menyandikannya ke URL. & =% 26
Matt Clark
1
Mencari di seluruh internet tidak dapat menemukan solusinya. @MattClark Anda adalah pahlawan. Saya baru saja menyandikan url & yang merupakan bagian dari data dan skrip saya berfungsi dengan baik.
Haris ur Rehman
1
Apakah ada "yang hilang di akhir cuplikan kode kedua?
David
24

Menempatkan tanda kutip tunggal di sekitar &simbol tampaknya berhasil. Artinya, menggunakan URL seperti http://www.example.com/page.asp?arg1=${i}'&'arg2=${j}dengan curl mengembalikan halaman web yang diminta.

Chernoff
sumber
2
Anda harus memasukkan persyaratan argumen pada pertanyaan tersebut sehingga jelas untuk pandangan masa depan.
Manatax
Mengapa jawaban ini diterima? Jawaban ini harus diterima stackoverflow.com/a/13339492/2898694
Sharikov Vladislav
13

Daripada mencoba karakter escape "&", Anda dapat menentukan parameter url http dalam permintaan POST dengan parameter -d seperti yang ditunjukkan di bawah ini:

curl -X POST http://www.example.com \
-d arg1=this \
-d arg2=that

Jika permintaannya adalah GET, maka Anda juga harus menambahkan opsi -G, yang memberi tahu curl untuk mengirim data dengan permintaan GET.

curl -X GET -G http://www.example.com \
-d arg1=this \
-d arg2=that
noego
sumber
Inilah jawaban terbaik! Terima kasih!
unbreak
Ini berhasil untuk saya. Menambahkan tanda kutip ganda tidak berhasil.
Juhog
9

Anda bisa menggunakan %26sebagai gantinya &. Kode entitas akan berfungsi dengan baik.

Seralto
sumber
0

Gunakan parameter --urldengan tanda kutip ganda berhasil untuk saya

Shehan Weerasooriya
sumber