curlコマンドラインを使用したXMLファイルの送信/投稿


回答:


507

その質問が他の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 /-data

(HTTP)ユーザーがHTMLフォームに入力して送信ボタンを押したときにブラウザーが行うのと同じ方法で、POST要求で指定されたデータをHTTPサーバーに送信します。これにより、curlはcontent-type application / x-www-form-urlencodedを使用してサーバーにデータを渡します。-F /-formと比較してください。

-d /-dataは--data-asciiと同じです。純粋にバイナリのデータをポストするには、代わりに--data-binaryオプションを使用する必要があります。フォームフィールドの値をURLエンコードするには、-data-urlencodeを使用できます。

これらのオプションのいずれかが同じコマンドラインで2回以上使用された場合、指定されたデータピースは、分離した&記号でマージされます。したがって、「-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"は期待されません
大佐パニック

12
「-d」を使用するとデフォルトでPOSTになるので、「-X」を使用する必要はありません。
Tal Liron、2013

4
curlのfollow redirectsオプションを使用している場合は、リダイレクトされたリクエストがPOSTを使用するようになるため、使用-Lないでください-X POST。@Taiが示唆するように-dを使用しただけでは、これは起こりません
Tristan Havelick 14

18
-dファイルから改行を取り除くことに注意してください。これを回避するには、--data-binary代わりにを使用してください。
2015年

189

マンページから、これらはあなたが探しているドロイドだと思います:

-F/--form <name=content>

(HTTP)これにより、curlはユーザーが送信ボタンを押した記入済みフォームをエミュレートできます。これにより、RFC2388に従って、Content-Type multipart / form-dataを使用してcurlからPOSTデータが生成されます。これにより、バイナリファイルなどのアップロードが可能になります。「コンテンツ」の部分を強制的にファイルにするには、ファイル名の前に@記号を付けます。

例:パスワードファイルをサーバーに送信するには、「password」は/ etc / passwdが入力となるフォームフィールドの名前です。

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

あなたの場合、これは次のようなものになります
curl -F file=@/some/file/on/your/local/disk http://localhost:8080


11
このソリューションには、(上記で選択したソリューションとは異なり)送信するファイルに名前を付けることができるという追加の利点があるため、たとえば複数のファイルを送信できます。
デビッドケアンズ

13
フォーマットは、file=@-あなたがパイプにあなたのファイルをしたい場合に便利です。
スティーブン・呂

2
誰かがファイルやその他の情報を送信しようとしている場合:-F key = val -F key = valを必要な回数だけ使用します。&で区切られた1つの大きな文字列ですべての投稿パラメーターを囲むことは機能しません。
hgolov 2014年

デスクトップからcurl経由でアップロードされたファイルを受信できるように、受信側のWebページを準備する方法について言及できますか?
SexyBeast

@Cupidvogel:他のファイルアップロードフィールドと同様。curl専用の特別な処理はありません。
Piskvorは2015

47

ファイルでオプション--dataを使用できます。

XMLコンテンツをsoap_get.xmlという名前のファイルに書き込み、curlコマンドを使用してリクエストを送信します。

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


OPがインラインテキストではなくファイルの投稿について質問しているので、これが答えになるはずです。
FearlessFuture 2015年

これは、Spring Webサーバーを使用している私にとって「エスケープされていない」と表示されるために必要でした。ありがとう!
rogerdpack

20

Jenkins 1.494を使用するcurlと、Ubuntu Linux 12.10でwith --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(ジョブと同じ)という名前のパラメーターを使用してWebフォームを作成します。その値は、という名前のローカルファイルシステム上のファイルの内容になります/local/path/to/your/file.txt@シンボルの接頭辞ではなく、与えられたファイル名のローカルファイルを送信するためにカールを伝えます。

2行目は、1行目のフォームパラメータと一致するJSONリクエストを定義しますmyfileparam

3行目は、フォームの[ビルド]ボタンをアクティブにします。4行目は、「/ build」サフィックスが付いたジョブURLです。

この呼び出しが成功した場合、curlはを返します0。それが失敗した場合、サービスからのエラーまたは例外がコンソールに出力されます。この回答は、ハドソン関連する古いブログの投稿から多くのものを得ています。


6

Windowsでcurlコマンドラインを使用してWindowsでXMLをPOSTする方法は次のとおりです。そのためには、batch / .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.