Curl -GET и -X GET

Curl предлагает ряд различных вызовов метода http, которые имеют префикс X, но также предлагает те же методы без. Я пробовал оба, и я не могу понять разницу. Может ли кто-нибудь быстро объяснить мне, как эти две операции отличаются?

Ответ 1

По умолчанию вы используете curl без явного указания, какой метод запроса использовать. Если вы просто передадите HTTP-URL, например, curl http://example.com, он будет использовать GET. Если вы используете -d или -F, curl будет использовать POST, -I вызовет HEAD, а -T сделает PUT.

Если по какой-либо причине вас не устраивают варианты по умолчанию, которые делает для вас curl, вы можете переопределить эти методы запроса, указав -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, и это будет делать что-то совершенно другое.

Также есть опция curl, называемая --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/

Ответ 2

-X [ваш метод]
X позволяет переопределить значение по умолчанию "Получить"

** исправлены строчные буквы x и прописные буквы X

Ответ 3

Использование -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: */*

Ответ 4

Возможно, я не следую вашему вопросу, но похоже, что существует опция -G, которая просто говорит завиток, чтобы использовать метод GET, а затем есть опция -X, которая позволяет вам делать все, что угодно. Таким образом, curl -G и curl -XGET будут одинаковыми. Я не вижу -GET, кажется, что завиток просто игнорирует что-либо после -G.