Curl을 통해 파일에 지정된 데이터로 POST 요청 보내기


241

커맨드 라인에서 Curl을 통해 POST 요청을해야합니다. 이 요청에 대한 데이터는 파일에 있습니다. PUT을 통해이 --upload-file옵션 으로 수행 할 수 있음을 알고 있습니다.

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"


1
미안하지만 실수로 내 문제를 설명 했으므로 php-curl을 통해 요청을 보내지 말고 Linux os의 명령 줄에서 curl 명령을 통해 요청을 보내야합니다.
육성

답변:


363

당신은 --data-binary논쟁을 찾고 있습니다 :

curl -i -X POST host:port/post-file \
  -H "Content-Type: text/xml" \
  --data-binary "@path/to/file"

위의 예 -i에서 모든 헤더를 인쇄하여 진행 상황을 볼 수 있으며 -X POST이것이 게시물임을 명시 적으로 나타냅니다. 와이어의 동작을 변경하지 않고 두 가지를 모두 안전하게 생략 할 수 있습니다. 파일 경로는 @기호 앞에 와야 하므로 curl파일에서 읽을 것을 알고 있습니다.


이 경우 @ ɢʜʘʂʈʀɛɔʘɴ.xml
dennismonsewicz

54
@부분은 매우 중요합니다!
Ron Klein

따라서 --data-binary 매개 변수를 사용하지만 실제 파일 내용은 텍스트 일 ​​수 있습니까? XML은 일반적으로 이진이 아니기 때문에.
David

8
실제로 당신은 -d 플래그 사용할 수 있습니다
아나톨리 Yakimchuk

16
@ Tol182 -dcurl줄 바꿈을 제거하지만 --data-binary그렇지 않습니다.
Acumenus

44

커맨드 라인에서 Curl을 통해 POST 요청을해야합니다. 이 요청에 대한 데이터는 파일에 있습니다.

당신이 할 필요가있을 것이다 --dataA를 인수 시작 @:

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path

예를 들어, 파일에 데이터 stuff.xml가 있으면 다음과 같은 작업을 수행합니다.

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path

stuff.xml파일 이름이 파일에 대한 상대 또는 전체 경로로 대체 될 수있다 @../xml/stuff.xml, @/var/tmp/stuff.xml...


2
명명 된 필드를 보내야하는 경우을 사용할 수도 있습니다 --data "name@stuff".
Hermann

15

매개 변수 이름을 지정해야하는 양식 데이터를 사용하여 파일을 업로드하는 경우 다음을 사용할 수 있습니다.

curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx


감사합니다! 1. 해결책이 효과가 없었습니다. parametername=정말 도움이되었습니다 :)
Cyborg

3

대부분의 답변은 여기에서 완벽하지만 내 특정 문제로 여기에 도착했을 때 POST 방법을 사용하여 이진 파일 (XLSX 스프레드 시트)을 업로드해야합니다. 한 가지 누락 된 것이 있습니다. 더 폼 데이터 요소 , 주석 등의 파일이나 태그는 파일로 내 사건이었다으로 등. 따라서 여기를 사용 사례로 여기에 추가하여 다른 사람들을 도울 수 있습니다.

curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url

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