curl -GET і -X GET


126

Curl пропонує ряд різних дзвінків методів http, які є префіксом X, але також пропонує ті ж методи без. Я спробував і те, і інше не можу зрозуміти різницю. Чи може хтось мені швидко пояснити, чим відрізняються ці дві операції?

Відповіді:


263

За замовчуванням ви використовуєте curl, не чітко вказуючи, який метод запиту використовувати. Якщо ви просто перейдете за URL-адресою HTTP, curl http://example.comвона використовуватиме GET. Якщо ви використовуєте -dабо -Fcurl буде використовувати POST, -Iце спричинить голову та -Tзробить її PUT.

Якщо з будь-якої причини ви не задоволені тими варіантами за замовчуванням, які роблять для вас, ви можете замінити ці методи запиту, вказавши -X [WHATEVER]. Таким чином, ви можете, наприклад, відправити DELETE, виконавши curl -X DELETE [URL].

Таким чином, робити це безглуздо, curl -X GET [URL]оскільки GET був би використаний у будь-якому випадку. У цьому ж сенсі це робити безглуздо, curl -X POST -d data [URL]...але ви можете зробити веселий і дещо рідкісний запит, який надсилає тіло запиту в GET-запиті з чимось подібним curl -X GET -d data [URL].

Копати глибше

curl -GET(за допомогою одного тире) для цієї мети просто неправильно. Це еквівалентно вказавши -G, -Eі -Tваріанти , і що буде робити що - то зовсім інше.

Існує також варіант завитка, покликаний --getне плутати питання ні з одним. Це довга форма -G, яка використовується для перетворення даних, визначених -dу запит GET, замість POST.

(Згодом я використала тут свою власну відповідь, щоб заповнити FAQ щодо завитків, щоб прикрити це .)

Попередження

Сучасні версії curl інформують користувачів про це непотрібне та потенційно шкідливе використання -X, коли дозволений багатослівний режим ( -v) - щоб повідомити користувачів. Далі пояснено та мотивовано у цій публікації блогу .

-G перетворює POST + тіло в GET + запит

Ви можете попросити curl перетворити набір -dпараметрів і замість того, щоб надсилати їх у тіло запиту за допомогою POST, розміщувати їх у кінці рядка запиту URL-адреси та видавати GET, використовуючи `-G. Подобається це:

curl -d name=daniel -d grumpy=yes -G https://example.com/

5
-XGET може бути не-оп, але це робить це явним.
mtyson

"За замовчуванням ви використовуєте curl, не чітко вказуючи, який метод запиту використовувати. Якщо ви просто перейдете в URL-адресу HTTP, наприклад curl example.com, він буде використовувати GET. Якщо ви використовуєте -d або -F curl, використовуйте POST, -я спричинить голова і -T зробить це PUT ". Все, що потрібно знати.
Донато

4
Явне краще, ніж неявне, коли є можливість. Невдача рано, невдача, скорочення аварій, скорочення часу налагодження. Єдиний раз, коли ви маєте привід пропустити його, це вводити його в командному рядку. Будь-який сценарій повинен визначати -XGET, навіть коли це абсолютно не потрібно.
Нарди

1
@ Backgammon, якщо вони роблять, вони роблять це неправильно. Але впевнені, що можуть.
Даніель Стенберг

2

-X [ваш метод]
X дає змогу змінити значення за замовчуванням "Отримати"

** виправлена xвелика літера до великої літериX


2
Це навіть не намагається відповісти на питання "чим ці дві операції відрізняються".
Мелебій

1

Використання -X [WHATEVER]лише змінює рядок методу запиту, який використовується у запиті HTTP. Це легше зрозуміти з двома прикладами - один із -X [WHATEVER]і один без - та пов'язані заголовки HTTP запиту для кожного:

# curl -XPANTS -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.224.86.126) port 80 (#0)
> PANTS / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*

# curl -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.33.50.167) port 80 (#0)
> GET / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.