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?


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.


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

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.


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

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.


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.