Як включити символ '&' в оператор bash curl


98

Я намагаюся використовувати curl в bash для завантаження веб-сторінки, але &символ у URL-адресі не трактується як символ, як мені хотілося б. Будь-які ідеї щодо того, як я можу переконати Баша, що символ &- це просто нудний персонаж і нічого особливого?


Подивіться на наступну тему , це повинно допомогти вам - stackoverflow.com/questions/2067969 / ...
morgents

Я намагався замінити &символ з \&, '&', "&", ^&але не змогли отримати URL , щоб правильно оцінити. Насправді, це '&'працює, коли я запускаю команду curl з Terminal.app, але не вдається, коли я поміщаю її в скрипт bash, загортаю в цикл і запускаю.
Chernoff

Відповіді:


122

Помістивши всю URL-адресу всередину подвійних лапок, слід подбати про вашу проблему.


9
одинарні лапки можуть бути кращими, якщо немає необхідності вирішувати змінні.
jpm

Коли я використовую лапки навколо цілої URL-адреси, вираз ${i}не повертає значення.
Чернофф

2
У моєму випадку подвійні лапки не вдалися, тоді як одинарні лапки працювали чудово.
abeboparebop

3
Будьте обережні, яка програма використовується для набору котирувань. Поспішавши редагувати сценарій оболонки, я використав програму для редагування тексту. У ньому ставлять похилі лапки замість прямих подвійних лапок. Це дійсно псує сценарій і ускладнює пошук проблеми!
Девід

40
curl "http://www.example.com?m=method&args=1"

Ви використовуєте & як роздільник для URL-адреси GET? Або це в частині даних?

Якщо він є в даних, ви повинні закодувати його до символу HTML, якщо ні, оточіть лапками.

Кодування для &має стати %26в URL-адресі.

curl "http://www.example.com?m=this%26that

Я використовую &символ як шматок даних, майже так само, як ви показали. Суть полягає в тому, що замість числових значень, які я використовую ${i}. Тому я хочу отримати http://www.example.com?m=method&args=${i}оцінку як URL-адресу.
Chernoff

3
Те, як я щойно показав URL-адресу, використовує '&' як деліметр для змінних GET, тому зараз я збентежений, у $ [i] у вас є шматок даних, що містить '&'? У такому випадку вам потрібно буде закодувати URL-адресу. & =% 26
Метт Кларк

1
Шукав весь Інтернет, не міг знайти рішення. @MattClark ти герой. Я просто закодований за адресою url і який був частиною даних, і мій сценарій працює нормально.
Haris ur Rehman

1
Чи є зниклий "у кінці другого фрагмента коду?"
Девід,

23

Наведення одинарних лапок навколо &символу, здається, працює. Тобто використання URL-адреси типу http://www.example.com/page.asp?arg1=${i}'&'arg2=${j}curl повертає запитувану веб-сторінку.


2
ви повинні включити вимогу аргументувати питання, щоб це було зрозуміло для майбутніх поглядів.
Manatax

Чому ця відповідь прийнята? Відповідь на це питання має бути acceped stackoverflow.com/a/13339492/2898694
Кульки Vladislav

13

Замість того, щоб пробувати вхідні символи "&", ви можете вказати параметри URL-адреси http у запитах POST із параметром -d, як показано нижче:

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

Якщо запит є GET, ви також повинні додати опцію -G, яка говорить curl надсилати дані із запитом GET.

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

Це найкраща відповідь! Дякую!
розірвати

Це спрацювало для мене. Додавання подвійних лапок не спрацювало.
Juhog

9

Ви можете використовувати %26замість цього &. Код сутності буде працювати нормально.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.