curl 호출을 통해 HTTP 요청을 사용하여 헤더를 보내는 방법은 무엇입니까?


1444

Linux 상자에서 Apache 서버로 헤더를 보내려고합니다. 컬 콜을 통해 어떻게 이것을 달성 할 수 있습니까?


60
예를 들어 http 요청에 curl을 사용하는 방법을 배우는 좋은 방법이 있습니다. Postman의 최신 버전을 다운로드하고 사용자 인터페이스 수준에서 원하는대로 http 요청을 구성한 다음 (예 : 헤더 및 json body를 사용하여 게시, 넣기, 가져 오기) "코드 생성"을 클릭하고 "컬"옵션을 선택하십시오. . 동등한 명령 줄을 제공합니다.
Vinicius Lima

답변:


509

가져 오기:

JSON으로 :

curl -i -H "Accept: application/json" -H "Content-Type: application/json" http://hostname/resource

XML로 :

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource

게시하다:

데이터 게시 :

curl --data "param1=value1&param2=value2" http://hostname/resource

파일 업로드의 경우 :

curl --form "fileupload=@filename.txt" http://hostname/resource

RESTful HTTP Post :

curl -X POST -d @filename http://hostname/resource

사이트에 로그인 (인증) :

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

RESTful 게시물에 대한 @filename의 의미는 무엇입니까? REST 서버에 파일을 게시하고 있습니까? 저에게 이상해 보입니다
JesseBoyd

6
나중에 똑같은 것을 궁금해하는 사람들에게 @ 표기법은 파일을 curl 요청에 인라인하지 않고 파일에서 서버로 보낼 데이터를 읽는 방법입니다. 파일 자체를 POST하지 않고 파일의 내용을 POST 요청의 본문으로 POST하고 있습니다.
f1dave

여기에 더 자세한 대답 : stackoverflow.com/questions/14978411/... :
Amith Koujalgi

1983

man curl:

   -H/--header <header>
          (HTTP)  Extra header to use when getting a web page. You may specify
          any number of extra headers. Note that if you should  add  a  custom
          header that has the same name as one of the internal ones curl would
          use, your externally set header will be used instead of the internal
          one.  This  allows  you  to make even trickier stuff than curl would
          normally do. You should not replace internally set  headers  without
          knowing  perfectly well what you're doing. Remove an internal header
          by giving a replacement without content on the  right  side  of  the
          colon, as in: -H "Host:".

          curl  will  make sure that each header you add/replace get sent with
          the proper end of line marker, you should thus not  add  that  as  a
          part  of the header content: do not add newlines or carriage returns
          they will only mess things up for you.

          See also the -A/--user-agent and -e/--referer options.

          This option can be used multiple times to add/replace/remove  multi-
          ple headers.

예:

curl --header "X-MyHeader: 123" www.google.com

-v옵션 을 추가하여 curl이 보낸 요청을 볼 수 있습니다 .


74
여러 헤더를 보내려면 둘 이상의 헤더를 사용하면 curl은 각 헤더를 다른 헤더로 구문 분석합니다. 동일한 --header 매개 변수 내에서 헤더를 구분할 방법이 없습니다. 예 : curl --header "수락 : javascript"--header "test : hello"-v www.google.com
Hatoru Hansou

2
사람들이 예제를 원한다면 여기에 남겨 두겠습니다. bropages.org
Peter Westmacott

맨 페이지 (OSX 이상)에는 이제 예가 포함됩니다. 예 : # curl -H "X- 이름 : Joe" 192.168.0.1
JESii

6
@ MartinKonicek 및 기타 : tldr 유틸리티 (brew 등을 설치하십시오)를 적극 권장합니다. 유일한 예입니다. 예 : "-사용자 정의 HTTP 메소드를 사용하여 추가 헤더로 요청을 보내십시오. curl -H 'X-My-Header :

280

에서 PHP :

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue'));

또는 여러 개를 설정할 수 있습니다.

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue', 'HeaderName2:HeaderValue2'));

1
@James 그것은 어떤 경우에는 잘 작동하지만 다른 경우에는 CURL이 추가 헤더를 보냅니다. "예상 : 100- 연속"-그것을 제거하는 방법에 대한 아이디어?
coding_idiot

@coding_idiot : 헤더 값 배열에 "Expect :"를 전달하여 비활성화 할 수 있습니다. 예 : curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ( 'HeaderName : HeaderValue', 'Expect :'));
ether

12
영업 이익은 PHP에 대해 아무것도 생각 말도하지 않았다
hanshenrik

헤더 이름은 대문자로 밑줄이 표시되고 HTTP_는 접두사가 붙습니다. 예를 들어, "보호 토큰"은 "HTTP_PROTECTION_TOKEN"이됩니다.
Bimal Poudel


44

GET (여러 매개 변수) :

curl -X  GET "http://localhost:3000/action?result1=gh&result2=ghk"

또는

curl --request  GET "http://localhost:3000/action?result1=gh&result2=ghk"

또는

curl  "http://localhost:3000/action?result1=gh&result2=ghk"

또는

curl -i -H "Application/json" -H "Content-type: application/json"  "http://localhost:3000/action?result1=gh&result2=ghk"

1
감사. 이런 종류의 URL에 대한 필수 인용문을 몰랐습니다.
remat_br

12

나는 우편 배달부를 사용합니다.

원하는 통화를 실행하십시오. 그런 다음 postman은 curl 코드를 표시하는 편리한 도구를 제공합니다.

터미널에서 실행하십시오. 여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


쉘 스크립트가 자체 포맷 요구 사항을 가지고 있기 때문에 윈도우에서 쉘 스크립트를 사용하는 경우 이것은 속도를 높이기 위해 작은 따옴표 또는 큰 따옴표를 피하는 데주의를
기울이는 좋은 해킹입니다.

우체부는 훌륭한 도구이지만 Kubernetes 포드와 같은 그래픽 환경이 없으면 쓸모가 없습니다. 컬을 배우면 항상 휴식을 테스트 할 수 있습니다.
남피 비아

11

또한 여러 헤더, 데이터 (예 : JSON)를 보내고 다음과 같이 단일 CUrl 호출에 호출 방법 (POST, GET)을 지정할 수 있습니다.

curl -X POST(Get or whatever) \
  http://your_url.com/api/endpoint \
  -H 'Content-Type: application/json' \
  -H 'header-element1: header-data1' \
  -H 'header-element2: header-data2' \

...... 더 많은 헤더 .......

  -d '{
  "JsonExArray": [
    {
      "json_prop": "1",
    },
    {
      "json_prop": "2",
    }
  ]
}'


7

사용자 정의 헤더를 보내려는 경우 다음 과 같이 할 수 있습니다.

curl -v -H @{'custom_header'='custom_header_value'} http://localhost:3000/action?result1=gh&result2=ghk

2

에서 아나콘다 를 통해 envirement GET, 예를 들어 명령이 있어야한다 :

curl.exe http://127.0.0.1:5000/books 

ex에 대한 데이터 게시 또는 패치 :

curl.exe http://127.0.0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\"rating\":\"2\"}' 

추신 :이 유형의 오류를 피하기 위해 json 데이터에 백 슬래시를 추가하십시오 => Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)

그리고 사용하는 curl.exe대신 curl이 문제를 방지하려면 전용 :

Invoke-WebRequest : Cannot bind parameter 'Headers'. Cannot convert the "Content-Type: application/json" value of type
"System.String" to type "System.Collections.IDictionary".
At line:1 char:48
+ ... 0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\" ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.