Параметри URL-адреси командного рядка CURL


186

Я намагаюся надіслати DELETEзапит із параметром URL за допомогою CURL. Я роблю:

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

Однак сервер не бачить параметр id = 3. Я спробував використовувати деякий додаток GUI, і коли я передаю URL як:, http://localhost:5000/locations?id=3він працює. Я дійсно вважаю за краще використовувати CURL, а не цю програму GUI. Хтось може, будь ласка, зазначити, що я роблю неправильно?

Відповіді:


269

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

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

або

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

30
Це спрацювало. Я щойно зрозумів, що URL-адреса повинна бути між цитатами, щоб прийняти параметри. Цей тип MIME призначений для URL-адреси з параметрами і для цього використовується програма GUI. Також не хочу робити 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 дозволяє переходити по черзі. (просто кажу)

Сподіваюся, це допомагає.


11
Рятувальник життя! Спасибі людино! У мене є сценарій, де я хочу використовувати --data-urlencode на GET. Це зробило це так, що мені не доведеться вручну кодувати URL-адреси параметрів. Дякую!
Натан Уоллес

3
Ви маєте на увазі, що -X DELETE -G - це дійсно POST-запит?
huggie

1
`-G, --поставте дані публікації в URL-адресу та використовуйте GET` Ні, вона просто додає дані публікації до URL-адреси, -X [метод] має перевагу (джерело: curl - допомога та досвід)
DownloadPizza

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