POST 요청을 수행하기위한 cURL 명령 줄 구문은 무엇입니까?


2186

cURL 명령 줄 도구를 사용하여 POST 요청을하려면 어떻게해야합니까?


curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data
svikramjeet

답변:


2542

필드 포함 :

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

필드가 개별적으로 지정된 경우 :

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

멀티 파트 :

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

필드와 파일 이름이있는 멀티 파트 :

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

데이터가없는 경우 :

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

자세한 내용은 cURL 매뉴얼을 참조하십시오 . 웹 브라우저를 모방에 컬 튜토리얼 도움이됩니다.

libcurl을 사용 curl_formadd()하면 일반적인 방법으로 양식을 제출하기 전에 함수를 사용하여 양식을 작성하십시오. 자세한 내용은 libcurl 설명서 를 참조하십시오.

큰 파일의 경우 업로드 진행률을 표시하는 매개 변수를 추가하십시오.

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

-o output그렇지 않으면 진행 표시 줄이 표시되지 않습니다 필요합니다.


7
@LauriRanta --data-urlencode(대시 없음), 최신 버전 이상
waitinforatrain

4
또한 PUT으로 자원을 업데이트해야하는 경우에도 작동합니다. curl -X PUT ...
Subfuzion

3
나는 인식하지 못했습니다 ... 나는 그것을 할 것입니다 때 With Fields,시와 MultipartWithout Data?
CodyBugstein

7
대신을 --data사용할 수 있습니다 -d.
user35538

필드 배열이 있습니다. 어떻게해야합니까?
ARUNBALAN NV

507

XML이 포함 된 RESTful HTTP POST의 경우 :

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

또는 JSON의 경우 다음을 사용하십시오.

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

이름이 지정된 파일의 내용을 읽고 filename.txt사후 요청으로 보냅니다.


13
@ tom-wijsman 설명 : curl -X POSTHTTP POST 요청을 암시하고 -d매개 변수 (long version :) --data는 curl이 다음에 오는 것이 POST 매개 변수임을 말하고 @filename파일의 내용을 매개 변수로 지정합니다 filename. 이 방법은 Twitter, Facebook, Ruby on Rails를 포함한 다양한 웹 서비스 및 CouchDB와 같은 데이터베이스의 HTTP API에서 찾을 수있는 RESTful HTTP API와 가장 잘 작동합니다. REST는 Representational State Transfer
Soundmonster

1
응답 XML을 한 줄이 아니라 형식화하는 방법은 무엇입니까?
Vitaly Zdanevich

6
-X POST의해 암시 된 이후로 당신이 떠날 수 있다고 생각합니다 -d.
benjifisher

여러 헤더를 제공하는 방법?
keya

여러 헤더 : curl -H "header2 : 1"-H "header2 : 2"...
Tomáš Kratochvíla

131

stdin의 데이터 -d @-

예:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

산출:

<p>Hello <strong>world</strong>!</p>

6
클립 보드에 이미 JSON 객체가있는 경우
유용

더 나은 : echo "$ message"| curl -H "콘텐츠 유형 : application / json"-d @- "$ url"
rzr

66
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

Curl Example Manual 에있는 예제 입니다.

위의 방법으로 문제가 해결되지 않으면 앰퍼샌드에 % 26을 사용하십시오.

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 

61

사이트에 로그인하려면 다음을 수행하십시오.

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

첫 번째 요청은 세션 쿠키 (성공적으로 로그인하면 제공됨)를 "헤더"파일에 저장합니다. 이제부터는 쿠키를 사용하여 브라우저로 로그인 한 후 일반적으로 액세스하는 웹 사이트의 모든 부분에 대해 귀하를 인증 할 수 있습니다.


6
curl 매뉴얼 페이지의 메모 : '-c, --cookie-jar 옵션은 쿠키를 저장하는 더 좋은 방법입니다.'
maxschlepzig

32
curl -v --data-ascii var=value http://example.com

더 많은 옵션이 있으며 자세한 내용을 확인 curl --help하십시오.


27

게으른 경우 Google 크롬에서 모든 작업을 수행 할 수 있습니다.

  1. 제출하려는 양식을 마우스 오른쪽 단추로 클릭하고 검사를 선택하십시오 . DevTools 패널이 열립니다.
  2. devtools 에서 네트워크 탭을 선택하고 로그 유지 확인란을 선택하십시오.
  3. 양식을 제출하고 POST 메소드를 사용하여 항목을 찾으십시오 (열 헤더를 마우스 오른쪽 단추로 클릭하고 메소드 가 선택되어 있는지 확인하십시오 ).
  4. POST가있는 행을 마우스 오른쪽 단추로 클릭하고 복사 > cURL로 복사를 선택하십시오 .

크롬 devtools : cURL로 복사

Chrome은 모든 요청 데이터를 cURL 구문으로 복사합니다.

크롬 사용 --data 'param1=hello&param2=world'하면 단일 사용하여 읽기 쉽게 만들 수있는 -d또는 -F따라 당 매개 변수를 POST의 유형 당신이 중 하나가 될 수있는, 보낼 요청 application/x-www-form-urlencoded이나 multipart/form-data따라.

이 파일은 다음과 같이 POST됩니다 application/x-www-form-urlencoded( 파일 업로드가 포함되지 않은 대부분의 양식에 사용됨 ).

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

A에 대한 multipart/form-dataPOST 사용 -F( 일반적으로 파일 업로드를 포함, 또는 양식에 사용되는 필드의 순서가 중요하거나 같은 이름의 여러 필드가 요구되는 경우 경우 ) :

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

User-Agent헤더는 일반적으로 필요하지 않습니다,하지만 난 단지의 경우에 그것을 던져했습니다. 다음 ~/.curlrc을 포함 하는 파일을 작성하여 모든 요청에 ​​대해 사용자 에이전트를 설정하지 않아도됩니다.User-Agent: "Mozilla/2.2"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.