2017-08-24 12 views
0

マルチパート/混合コンテンツを含むサーバーにファイルを送信する必要があります。 exempleについて:マルチパート/ミックスをCURLとpreifined boudaryでどう送信するのですか?

curl -d @/tmp/exemple.file -XPOST http://myServer:8000/multipartService -H "content-type: multipart/Mixed ; boundary=----------------------------1b479dca9c3e" 

しかし、サーバは成功しません:

------------------------------1b479dca9c3e 
Content-Disposition: form-data; name="one_part" 
Content-Type: text/xml; charset=utf-8 
XX-Project-Type: METADATA 

<?xml version="1.0" encoding="utf-8"?> 
<My_MSG version="1"> 
    <MSG date="2014-08-20T18:39:59.154326+00:00"> 
    <METADATA mess_id="sd1212sd05AZ"> 
     <CONVERSION> 
     <FILE name="foo.bar"/> 
     <FILE name="ping.pong"/> 
     <FILE name="abc.def"/> 
     </CONVERSION> 
    </METADATA> 
    </MSG> 
</My_MSG> 

------------------------------1b479dca9c3e 
Content-Disposition: form-data; name="one_part" 
Content-Type: text/xml; charset=utf-8 
XX-Project-Type: METADATA 

<?xml version="1.0" encoding="utf-8"?> 
<My_MSG version="1"> 
    <MSG date="2015-08-20T19:39:59.154326+00:00"> 
    <METADATA mess_id="az987456321"> 
     <CONVERSION> 
     <FILE name="bar.foo"/> 
     <FILE name="pong.ping"/> 
     <FILE name="def.abc"/> 
     </CONVERSION> 
    </METADATA> 
    </MSG> 
</My_MSG> 

------------------------------1b479dca9c3e-- 

あなたはマルチパートboudaryはすでにので、私は以下のコマンドを使用しますCURLでそれを送信するために、送信するファイルに定義されて見ることができるように部品を扱う。私は、サーバーのログを持っていないが、私はサーバーに送信されたかを確認するのtcpdumpを実行さしあたり:

tcpdumpResult

スペースや改行が送信要求で削除され、それができたようですリクエストの内容はサーバーによって複数の/混合されたものとして処理できないことを説明してください。

マルチパート/混合形式のファイルを送信する方法は知っていますか? hanshenrikため


編集:

enter image description here

+0

コンテンツタイプのヘッダーを削除し、自動的にカールを生成させます。それはうまくいくはずです。私は実際にカールがあなたのカスタムヘッダーを解析し、境界を採用したことに驚いています。また、ドロップします-XPOST – hanshenrik

+0

@hanshenrik私の編集を参照してください、application/x-www-form-urlencodedへのデフォルトのcontent-typeフォールバック:/ – Fractaliste

答えて

1

レッツは、マルチパートPOST自体を行うと、それは代わりに、それ自体で完全に区切りを処理させるカール。たとえば、2つの異なるファイルから読み取った内容の2つの部分を投稿する場合は、次のようにします。

curl -F "part_one=<file1.xml" -F "part_two=<file2.xml" \ 
http://myServer:8000/multipartService 

主張していますか?

次に、do the whole thing yourselfを使用すると、--data-binaryが必要です。

+0

これは '--data-binary'でうまく動作しますが、CURLS実際には2つの要求が送信されるため、 '-H'オプションを使用します。 – Fractaliste

+0

申し訳ありませんが、実際に何を意味するのか解読できません... –

関連する問題