Параметры URL командной строки CURL

186

Я пытаюсь отправить DELETEзапрос с параметром URL, используя CURL. Я делаю:

curl -H application/x-www-form-urlencoded -X DELETE http://localhost:5000/locations` -d 'id=3'

Однако сервер не видит параметр id = 3. Я попытался использовать приложение с графическим интерфейсом, и когда я передаю URL-адрес как:, http://localhost:5000/locations?id=3он работает. Я действительно предпочел бы использовать CURL, а не это приложение с графическим интерфейсом. Может кто-нибудь указать, что я делаю не так?

темное небо
источник

Ответы:

269

Заголовок "application / x-www-form-urlencoded", почему? Попробуйте это:

curl -X DELETE 'http://localhost:5000/locations?id=3'

или

curl -X GET 'http://localhost:5000/locations?id=3'
felipsmartins
источник
30
Это сработало. Я только что понял, что URL должен быть между кавычками, чтобы принимать параметры. Этот тип MIME предназначен для URL с параметрами, и именно это использует приложение с графическим интерфейсом. Кроме того, я не хочу делать GET. Я хочу DELETEи нет, GETи я пытаюсь следовать надлежащим стандартам дизайна REST, поэтому я использую DELETE, а не GET при удалении.
Даркский
1
В моем случае это работает только с двойной кавычкой, с одинарной кавычкой в ​​говорит curl: (1) Протокол 'http не поддерживается или отключен в libcurl, но с "" цитата работает просто отлично.
Jeff_Alieffson
150

Фелипсмартинс это правильно.

Стоит отметить, что это потому, что вы не можете использовать опцию -d / - data, если это не POST-запрос. Но это все еще возможно, если вы используете опцию -G.

Что означает, что вы можете сделать это:

curl -X DELETE -G 'http://localhost:5000/locations' -d 'id=3'

Здесь это немного глупо, но когда вы находитесь в командной строке и у вас много параметров, это намного аккуратнее.

Я говорю это потому, что команды cURL обычно довольно длинные, поэтому стоит делать это более чем на одной строке, избегая разрывов строк.

curl -X DELETE -G \
'http://localhost:5000/locations' \
-d id=3 \
-d name=Mario \
-d surname=Bros

Это, очевидно, намного удобнее, если вы используете zsh. Я имею в виду, когда вам нужно отредактировать предыдущую команду, потому что zsh позволяет вам переходить строка за строкой. (просто говорю)

Надеюсь, поможет.

Mig
источник
11
Спасатель жизни! Спасибо чувак! У меня есть скрипт, где я хочу использовать --data-urlencode на GET. Это сделало так, что мне не нужно вручную кодировать URL-адреса моих параметров. Спасибо!
Натан Уоллес
3
Вы подразумеваете, что -X DELETE -G действительно POST-запрос?
Хагги
1
`-G, --get Поместить данные поста в URL и использовать GET` Нет, он просто добавляет данные поста в URL, -X [метод] имеет приоритет (источник: curl --help and experience)
DownloadPizza
Как это может быть настолько запутанным. Можно предположить, --data-urlencode что данные добавляются в URL без каких-либо исключений, но теперь вам нужно объединить их с --getтем, чтобы они действительно работали.
Яакко