web-dev-qa-db-ja.com

「boundary = ------」を追加せずに、コマンドラインでcurlを介してContent-Typeを設定できますか?

コマンドラインのcurlコマンドをWebサーバーに送信しています。 Webサーバーは、タイプapplication/xmlまたはapplication/jsonのコンテンツのみを受け入れます。私のcurlコマンド(少し編集)は次のとおりです。

curl -k  --cert certfile --form "[email protected]" --cacert cacert.pem https://IP:PORT/v1/all/3131 --header "allowed-domains: foo.net" -H "Content-Type:application/xml"

サーバーがこれを次のように拒否していることがわかりました。

POST load request has invalid type application/xml; boundary=----------------------------dc1435dd0d36

問題は、サーバーが認識しないことです

"boundary=----------------------------dc1435dd0d36"

それを含めないようにcurlに指示する方法はありますか?それとも、これはサーバーのバグですか?

SOこれについての関連する質問を見つけましたが、curl_setoptを介してcurlオプションを設定できるプログラムのみを対象としていました。コマンドラインでこれらのことを行う方法はありますか?以前の質問は次のとおりです。

PHP cURL Content-LengthとContent-Typeが間違っています

助けてくれてありがとう!

5
David Lobron

application/xmlを送信する場合は、--dataを送信する--formの代わりにmultipart/form-dataを使用する必要があります。あなたの場合、送信したいのはファイル自体ではなく、ファイルの内容である必要があります。このような:

curl -k  --cert certfile --data "@test.xml" --cacert cacert.pem https://IP:PORT/v1/all/3131 --header "allowed-domains: foo.net" -H "Content-Type:application/xml"
10