cURL을 사용하여 파일 내용을 본문 엔터티로 보내는 방법


207

cURL 명령 줄 유틸리티를 사용하여 웹 서비스에 HTTP POST를 보냅니다. 파일의 내용을 POST의 본문 엔터티로 포함하고 싶습니다. 나는 -d </path/to/filename>유형 정보 --data </path/to/filename> --data-urlencode </path/to/filename>등의 다른 변형뿐만 아니라 다른 파일 도 사용하려고 시도했습니다 ... 파일은 항상 첨부되어 있습니다. 나는 신체 실체로서 그것을 필요로한다.

답변:


338

@filename구문을 찾고 있다고 생각 합니다. 예 :

줄 바꾸기

curl --data "@/path/to/filename" http://...

새로운 줄을 유지

curl --data-binary "@/path/to/filename" http://...

=====

curl은 파일에서 모든 줄 바꿈을 제거합니다. 줄 바꿈이 그대로있는 파일을 보내려면 --data-binary--data 대신 사용하십시오 .


21
당신이 진짜 공상하고 싶다면 할 수 있습니다 : cat file.txt | curl --data "@-" `(< url.txt )` @-컬에게 stdin에서 읽도록 지시합니다. 리디렉션 (< x.txt )을 사용하여 원하는 것을 넣을 수도 있습니다 . bash를 사용하는 경우.
Breedly

62
curl은 파일에서 모든 줄 바꿈을 제거합니다. 줄 바꿈을 그대로 사용하여 파일을 보내려면 --data-binary대신 사용하십시오 --data.
Chris

이제이 요청을 승인하기 위해 로그인 자격 증명을 어떻게 추가합니까?
anon58192932

@ anon58192932-서버의 보안 프로토콜에 따라 다릅니다. name:value사용자 이름 및 비밀번호와 같은 쌍 을 사용 하는 경우 서비스가 기대하는 것과 일치하는 필수 헤더를 --header: "<header_name>:<header_value>"단일 문자열로 추가하십시오.
Roy Hinkley

19

나는 질문에 대한 답을 알고 있지만 내 경우에는 텍스트 파일의 내용을 Slack Webhook api 로 보내려고 했는데 어떤 이유로 든 위의 답변이 작동하지 않았습니다. 어쨌든, 이것이 마침내 나를 위해 트릭을 한 것입니다.

curl -X POST -H --silent --data-urlencode "payload={\"text\": \"$(cat file.txt | sed "s/\"/'/g")\"}" https://hooks.slack.com/services/XXX

이것은 점을 밑줄 (.-> _)로 변환하지 않으며 개행을 유지합니다. 감사!
Ramon Fincken

1
멋지지만 curl에 지정되지 않고 명령 줄에서 파일이 폭발하기 때문에 질문에 대답하지 않습니다. 또한 쉘의 모든 특수 문자를 이스케이프해야하는지 궁금합니다.하지만 그것에 대해 충분히 알지 못합니다;)
Gerard ONeill

고마워, 내 생명을 구했어!
aryswisnu

거대한 콘텐츠 파일의 경우 위의 컬이 작동하지 않습니다 curl: argument list too long.이 경우 허용되는 답변은 생명의 은인curl --data "@/path/to/filename" http://...
다른 코더

0

내 경우에는 @일종의 인코딩 문제가 발생했지만 여전히 이전 방식을 선호합니다.

curl -d "$(cat /path/to/file)" https://example.com
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.