curl -GET 및 -X GET


126

Curl은 X로 시작하는 일련의 다른 http 메소드 호출을 제공하지만 X가없는 동일한 메소드도 제공합니다. 나는 둘 다 시도했지만 차이점을 알아낼 수없는 것 같습니다. 누군가이 두 작업이 어떻게 다른지 빨리 설명해 줄 수 있습니까?

답변:


263

기본적으로 사용할 요청 방법을 명시 적으로 지정하지 않고 curl을 사용합니다. HTTP URL을 전달 curl http://example.com하면 GET을 사용할 것입니다. 사용 -d하거나 -Fcurl이 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옵션 을 지정하는 것과 동일하며 완전히 다른 작업을 수행합니다.

--get문제를 혼동하지 않기 위해 호출되는 컬 옵션도 있습니다. 긴 형식의 -G로 지정된 데이터를 -dPOST 대신 GET 요청으로 변환하는 데 사용됩니다 .

(나중에 나는 이것을 다루기 위해 curl FAQ를 채우기 위해 여기에 내 대답을 사용 했습니다 .)

경고

최신 버전의 curl은 상세 모드가 활성화 된 경우 ( -v)-사용자가 인식 할 수 있도록 -X의 불필요하고 잠재적으로 유해한 사용에 대해 사용자에게 알립니다 . 이 블로그 게시물 에서 더 자세히 설명하고 동기를 부여했습니다 .

-G는 POST + 본문을 GET + 쿼리로 변환합니다.

curl에 -d옵션 세트를 변환 하도록 요청하고 POST로 요청 본문에 보내는 대신 URL의 쿼리 문자열 끝에 넣고`-G를 사용하여 GET을 발행 할 수 있습니다. 이렇게 :

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

5
-XGET은 작동하지 않을 수 있지만 명시 적으로 만듭니다.
mtyson

"기본적으로 사용할 요청 방법을 명시 적으로 지정하지 않고 curl을 사용합니다. curl example.com 과 같은 HTTP URL을 전달 하면 GET이 사용됩니다. -d 또는 -F curl을 사용하면 POST를 사용합니다. -I HEAD 및 -T는 PUT으로 만듭니다. " 당신이 알아야 할 모든 것.
Donato

4
옵션이있을 때마다 명시적인 것이 암시적인 것보다 낫습니다. 조기 실패, 빠른 실패, 사고 감소, 디버그 시간 감소. 건너 뛰는 변명은 명령 줄에 입력 할 때뿐입니다. 모든 스크립트는 엄격하게 불필요한 경우에도 -XGET을 지정해야합니다.
백개 먼

1
@Backgammon 그들이 그렇게한다면, 그들은 그것을 잘못하고 있습니다. 하지만 물론 가능합니다.
Daniel Stenberg 2019

2

-X [사용자 방법]
X를 사용하면 기본 'Get'을 재정의 할 수 있습니다.

** 소문자 x를 대문자로 수정X


2
이것은 "이 두 가지 작업이 어떻게 다른지"라는 질문에 답하지도 않습니다.
Melebius 2019

1

를 사용 하면 HTTP 요청에 사용 된 -X [WHATEVER]요청의 메서드 문자열 만 변경 됩니다. 두 가지 예 (하나는 포함 -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: */*
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.