Как включить символ '&' в инструкцию bash curl

100

Я пытаюсь использовать curl в bash для загрузки веб-страницы, но &символ в URL-адресе не интерпретируется как символ, как мне хотелось бы. Есть идеи, как я могу убедить bash, что символ &- это просто скучный персонаж и ничего особенного?

Чернов
источник
Взгляните на следующую тему, это должно вам помочь - stackoverflow.com/questions/2067969/…
morgents
Я пытался заменить &символ с \&, '&', "&", ^&но не смогли получить URL , чтобы правильно оценить. На самом деле, все '&'работает, когда я запускаю команду curl из Terminal.app, но не работает, когда я помещаю ее в сценарий bash, оборачиваю его в цикл и запускаю.
Chernoff

Ответы:

125

Помещение всего URL-адреса в двойные кавычки должно решить вашу проблему.

Мьюарес
источник
9
одинарные кавычки могут быть лучше, если нет необходимости разрешать переменные.
jpm
Когда я использую кавычки вокруг всего URL-адреса, выражение ${i}не возвращает значения.
Chernoff
2
В моем случае двойные кавычки не сработали, а одинарные кавычки работали нормально.
abeboparebop
3
Будьте осторожны, какая программа используется для ввода кавычек. Торопясь редактировать сценарий оболочки, я воспользовался программой редактирования текста. Вместо прямых двойных кавычек он ставил наклонные кавычки. Это действительно портит сценарий и затрудняет поиск проблемы!
Дэвид
41
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-адрес и это был фрагмент данных, и мой скрипт работает нормально.
Харис ур Рехман,
1
Есть ли пропущенный "в конце второго фрагмента кода?"
Дэвид
24

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

Чернов
источник
2
вы должны включить требование аргументации в вопрос, чтобы его можно было использовать в будущем.
Manatax
Почему этот ответ принят? Этот ответ должен быть принят stackoverflow.com/a/13339492/2898694
Шариков Владислав
13

Вместо того, чтобы пытаться использовать escape-символы "&", вы можете указать параметры 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
ноэго
источник
Это лучший ответ! Спасибо!
unbreak
Это сработало для меня. Добавление двойных кавычек не помогло.
Juhog
9

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

Серальто
источник
0

Использовать параметр --urlс двойными кавычками у меня сработал

Шехан Вирасурия
источник