コマンドラインからcurlを使用してxmlファイルをローカルサーバーhttp:// localhost:8080に送信/投稿するにはどうすればよいですか?
どのコマンドを使用すればよいですか?
コマンドラインからcurlを使用してxmlファイルをローカルサーバーhttp:// localhost:8080に送信/投稿するにはどうすればよいですか?
どのコマンドを使用すればよいですか?
回答:
その質問が他の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を使用します。
-L
しないでください-X POST
。@Taiが示唆するように-dを使用しただけでは、これは起こりません
-d
ファイルから改行を取り除くことに注意してください。これを回避するには、--data-binary
代わりにを使用してください。
マンページから、これらはあなたが探しているドロイドだと思います:
-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
file=@-
あなたがパイプにあなたのファイルをしたい場合に便利です。
ファイルでオプション--dataを使用できます。
XMLコンテンツをsoap_get.xmlという名前のファイルに書き込み、curlコマンドを使用してリクエストを送信します。
curl -X POST --header "Content-Type:text / xml; charset = UTF-8" --data @ soap_get.xml your_url
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
。それが失敗した場合、サービスからのエラーまたは例外がコンソールに出力されます。この回答は、ハドソンに関連する古いブログの投稿から多くのものを得ています。
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"
The contents of the file must already be URL-encoded.
OPのXMLファイルは確かにそうではありません。