cURL을 사용하여 본문, 헤더 및 HTTP 매개 변수로 POST를 보내는 방법은 무엇입니까?


39

cURL에서 간단한 POST 명령을 사용하는 방법에 대한 많은 예를 찾았지만 다음을 포함하는 전체 HTTP POST 명령을 보내는 방법에 대한 예를 찾지 못했습니다.

  • 헤더 (기본 인증)
  • HTTP 매개 변수 ( s=1&r=33)
  • 본문 데이터, 일부 XML 문자열

내가 찾은 것은 :

echo "this is body" | curl -d "ss=ss&qq=11" http://localhost/

그것은 작동하지 않으며 본문으로 HTTP 매개 변수를 보냅니다.



유사한 느낌이 의 속는 superuser.com/questions/149329/...는 나는이 하나가 헤더에 대한 특정과 같다 알고 있지만 다른 질문에 대한 답변은 또한 처리합니다. 나는 일반적으로 오래된 인기있는 질문을 속임수로 표시하지 않지만 이것은 예외입니다. 완전성을 위해 물건을 옮겨야 할 수도 있습니다.
Michael Durrant

실제로 다른 답변은 매우 구체적으로 언급하지만 --header이 답변 은 그렇지 않습니다
Michael Durrant

답변:


15

의견이 충분하지 않으므로 도움이되기를 바랍니다.

curl -L -v --post301 --post302 -i -X PUT -T "${aclfile}"  \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  ${host}:${port}${resource}

이것이 내가 S3 버킷 acl put 작업에 사용한 것입니다. 헤더는 -H에 있고 xml 파일 인 body는 -T 다음에 $ {aclfile}에 있습니다. 출력에서 볼 수 있습니다.

/aaa/?acl
* About to connect() to 192.168.57.101 port 80 (#0)
*   Trying 192.168.57.101...
* Connected to 192.168.57.101 (192.168.57.101) port 80 (#0)
> PUT /aaa/?acl HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.57.101
> Accept: */*
> Date: Thu, 18 Aug 2016 08:01:44 GMT
> Content-Type: application/x-www-form-urlencoded; charset=utf-8
> Authorization: AWS WFBZ1S6SO0DZHW2LRM6U:r84lr/lPO0JCpfk5M3GRJfHdUgQ=
> Content-Length: 323
> Expect: 100-continue
>
< HTTP/1.1 100 CONTINUE
HTTP/1.1 100 CONTINUE

* We are completely uploaded and fine
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< x-amz-request-id: tx00000000000000000001f-0057b56b69-31d42-default
x-amz-request-id: tx00000000000000000001f-0057b56b69-31d42-default
< Content-Type: application/xml
Content-Type: application/xml
< Content-Length: 0
Content-Length: 0
< Date: Thu, 18 Aug 2016 08:01:45 GMT
Date: Thu, 18 Aug 2016 08:01:45 GMT

<
* Connection #0 to host 192.168.57.101 left intact

url 매개 변수에 "+"와 같은 특수 기호가 포함 된 경우 모든 매개 변수 (특수 기호 포함)에 --data-urlencode를 사용하십시오.

curl -G -H "Accept:..." -H "..." --data-urlencode "beginTime=${time}+${zone}" --data-urlencode "endTime=${time}+${zone}" "${url}"

57

HTTP "매개 변수"는 URL의 일부입니다.

"http://localhost/?name=value&othername=othervalue"

기본 인증에는 별도의 옵션이 있으므로 사용자 지정 헤더를 만들 필요가 없습니다.

-u "user:password"

POST "body"는 --data(for application/x-www-form-urlencoded) 또는 --form(for multipart/form-data) 를 통해 보낼 수 있습니다 .

-F "foo=bar"                  # 'foo' value is 'bar'
-F "foo=<foovalue.txt"        # the specified file is sent as plain text input
-F "foo=@foovalue.txt"        # the specified file is sent as an attachment

-d "foo=bar"
-d "foo=<foovalue.txt"
-d "foo=@foovalue.txt"
-d "@entirebody.txt"          # the specified file is used as the POST body

--data-binary "@binarybody.jpg"

요약하면 다음과 같습니다.

curl -d "this is body" -u "user:pass" "http://localhost/?ss=ss&qq=11"

@ 에머슨 :해야합니다; PHP의 모듈은 원래 C libcurl이 가지고있는 모든 기능을 가지고있는 것 같습니다. 위의 내용은 상당히 기본적인 기능입니다. 그러나 사용할 정확한 기능을 모르겠습니다. 찾을 수 없으면 스택 오버플로를 요청하십시오.
grawity
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.