curl 명령 행을 사용하여 XML 파일 전송 / 포스트


답변:


505

해당 질문이 다른 Hudson 질문에 연결되어 있으면 질문을 제공하십시오. 명령 행에서 XML을 사용하여이 방법으로 :

$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url

파일에서 읽으려면 약간 변경해야합니다.

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url

맨 페이지를 읽으십시오 . -d 매개 변수에 대한 요약을 따릅니다.

-d /-데이터

(HTTP) 사용자가 HTML 양식을 작성하고 제출 단추를 누를 때 브라우저가 수행하는 것과 동일한 방식으로 POST 요청의 지정된 데이터를 HTTP 서버로 보냅니다. 이로 인해 curl은 content-type application / x-www-form-urlencoded를 사용하여 서버에 데이터를 전달합니다. -F /-form과 비교하십시오.

-d /-data는 --data-ascii와 동일합니다. 순수 이진 데이터를 게시하려면 --data-binary 옵션을 대신 사용해야합니다. 양식 필드의 값을 URL 인코딩하려면 --data-urlencode를 사용할 수 있습니다.

이러한 옵션 중 하나를 동일한 명령 줄에서 두 번 이상 사용하면 지정된 데이터 조각이 분리 및 기호와 함께 병합됩니다. 따라서 '-d name = daniel -d skill = lousy'를 사용하면 'name = daniel & skill = lousy'와 같은 포스트 청크가 생성됩니다.

@ 문자로 데이터를 시작하는 경우 나머지는 데이터를 읽을 파일 이름이거나-curl이 stdin에서 데이터를 읽으려면 파일 이름이어야합니다. 파일의 내용은 이미 URL 인코딩되어 있어야합니다. 여러 파일을 지정할 수도 있습니다. 따라서 'foobar'라는 파일에서 데이터를 게시하는 것은 --data @foobar로 수행됩니다.


2
맨 페이지를 읽으십시오. The contents of the file must already be URL-encoded.OP의 XML 파일은 반드시 그렇지 않습니다.
대령 패닉

52
content-type을 지정하는 한 URL 인코딩--header "Content-Type:application/xml" 이 필요하지 않습니다
Panic Colonic

12
"-d"를 사용하면 기본적으로 POST로 설정되므로 "-X"도 사용할 필요가 없습니다.
탈 리론

4
curl의 경로 재 지정 옵션을 사용 하는 경우 경로 재 지정된 요청도 POST를 사용 하므로 사용 -L하지 마십시오-X POST . @Tai가 제안한대로 -d를 사용하면 이런 일이 발생하지 않습니다.
Tristan Havelick

18
-d파일에서 줄 바꿈 을 제거 한다는 점에주의 하십시오. 이를 피하려면 --data-binary대신 사용하십시오.
Yar

189

로부터 , 나는이 당신이 찾고있는 드로이드 믿는다 :

-F/--form <name=content>

(HTTP) curl은 사용자가 제출 버튼을 눌렀을 때 채워진 양식을 에뮬레이트 할 수 있습니다. 이는 RFC2388에 따라 Content-Type multipart / form-data를 사용하여 curl to POST 데이터를 발생시킵니다. 이진 파일 등을 업로드 할 수 있습니다. 'content'부분을 파일로 만들려면 파일 이름 앞에 @ 기호를 붙입니다.

예를 들어, 비밀번호 파일을 서버로 보내려면 여기서 'password'는 / etc / passwd가 입력 될 양식 필드의 이름입니다.

curl -F password=@/etc/passwd www.mypasswords.com

따라서 귀하의 경우에는 다음과 같습니다
curl -F file=@/some/file/on/your/local/disk http://localhost:8080


11
이 솔루션은 (위에서 선택한 솔루션과 달리) 전송되는 파일의 이름을 지정할 수 있다는 추가 이점이 있으므로 여러 파일을 전송할 수 있습니다.
David Cairns

13
file=@-파일을 파이프하려는 경우이 형식 이 도움이됩니다.
Steven Lu

2
누구나 파일 및 기타 정보를 보내려는 경우 : -F key = val -F key = val을 필요한만큼 사용하십시오. &로 구분 된 하나의 큰 문자열로 모든 포스트 매개 변수를 묶으면 작동하지 않습니다.
hgolov

curl에서 업로드 된 파일을 데스크탑에서 수신 할 수 있도록 수신 웹 페이지를 준비하는 방법을 언급 할 수 있습니까?
SexyBeast

@Cupidvogel : 다른 파일 업로드 필드와 마찬가지로; curl에 대한 특별한 처리는 없습니다.
Piskvor

47

파일과 함께 --data 옵션을 사용할 수 있습니다.

이름이 soap_get.xml 인 파일에 xml 컨텐츠를 쓰고 curl 명령을 사용하여 요청을 보냅니다.

curl -X POST-헤더 "Content-Type : text / xml; charset = UTF-8"--data @ soap_get.xml your_url


OP가 인라인 텍스트가 아닌 파일을 게시하도록 요구하기 때문에 이것이 답이되어야합니다.
FearlessFuture

이것은 스프링 웹 서버를 사용하여 나를 위해 "비 탈출"을 표시하는 데 필요했습니다. 감사합니다!
rogerdpack

20

젠킨스 1.494로, 내가 사용하는 우분투 리눅스 12.10에서 작업 매개 변수에 파일을 보낼 수 있었다 curl--form매개 변수 :

curl --form name=myfileparam --form file=@/local/path/to/your/file.xml \
  -Fjson='{"parameter": {"name": "myfileparam", "file": "file"}}' \
  -Fsubmit=Build \
  http://user:password@jenkinsserver/job/jobname/build

Jenkins 서버에서 단일 매개 변수 (라는 파일 업로드 매개 변수)를 허용하는 작업을 구성했습니다 myfileparam.

curl 호출의 첫 번째 줄은 매개 변수라는 이름의 웹 양식을 구성합니다. myfileparam (작업과 동일) 인 . 그 값은 로컬 파일 시스템에있는 파일의 이름이 /local/path/to/your/file.txt됩니다. @기호 접두어 대신 주어진 파일 이름의 로컬 파일을 보내 컬 알려줍니다.

두 번째 줄은 첫 번째 줄의 양식 매개 변수와 일치하는 JSON 요청을 정의합니다. myfileparam .

세 번째 줄은 폼의 빌드 버튼을 활성화합니다. 네 번째 줄은 "/ build"접미사가있는 작업 URL입니다.

이 호출이 성공하면 curl이를 반환합니다 0. 실패하면 서비스의 오류 또는 예외가 콘솔에 인쇄됩니다. 이 답변은 Hudson과 관련된 오래된 블로그 게시물 에서 많이 가져 왔습니다.


6

Windows에서 curl 명령 행을 사용하여 Windows에서 XML을 POST하는 방법은 다음과 같습니다. 배치 / .cmd 파일을 더 잘 사용하십시오.

curl -i -X POST -H "Content-Type: text/xml" -d             ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^>                ^
    ^<Transaction^>                                           ^
        ^<SomeParam1^>Some-Param-01^</SomeParam1^>            ^
        ^<Password^>SomePassW0rd^</Password^>                 ^
        ^<Transaction_Type^>00^</Transaction_Type^>           ^
        ^<CardHoldersName^>John Smith^</CardHoldersName^>     ^
        ^<DollarAmount^>9.97^</DollarAmount^>                 ^
        ^<Card_Number^>4111111111111111^</Card_Number^>       ^
        ^<Expiry_Date^>1118^</Expiry_Date^>                   ^
        ^<VerificationStr2^>123^</VerificationStr2^>          ^
        ^<CVD_Presence_Ind^>1^</CVD_Presence_Ind^>            ^
        ^<Reference_No^>Some Reference Text^</Reference_No^>  ^
        ^<Client_Email^>john@smith.com^</Client_Email^>       ^
        ^<Client_IP^>123.4.56.7^</Client_IP^>                 ^
        ^<Tax1Amount^>^</Tax1Amount^>                         ^
        ^<Tax2Amount^>^</Tax2Amount^>                         ^
    ^</Transaction^>                                          ^
" "http://localhost:8080"

curl 명령과 함께 사용하기 전에 XML 문자열의 형식을 지정하는 방법
Chinmoy

3

헤더가 여러 개인 경우 다음을 사용할 수 있습니다.

curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url

3

이 명령을 사용할 수 있습니다 :

curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: <<Removed>>' -F file=@"/home/xxx/Desktop/customers.json"  'API_SERVER_URL' -k 

1

Windows에서 curl 을 사용하는 경우 :

curl -H "Content-Type: application/xml" -d "<?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?><message><sender>Me</sender><content>Hello!</content></message>" http://localhost:8080/webapp/rest/hello
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.