Как включить символ '&' в инструкцию 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Вместо этого можно использовать &. Код объекта будет работать нормально.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.