2013-09-03 10 views
7

に私はXMLHttpRequestを介して、ポストデータを無効な境界を送っています:PythonでXMLHttpRequestのマルチパート/フォームデータ:マルチパート

var xmlHttp=new XMLHttpRequest(); 
xmlHttp.open("POST", domain, true); 
xmlHttp.setRequestHeader("Content-type","multipart/form-data"); 
var formData = new FormData(); 
formData.append("data", data_json_string); 
xmlHttp.send(formData); 

を、私はPOST(またはファイルか何か)を取得しようとする場合、私はエラーを取得するデータ:

MultiPartParserError: Invalid boundary in multipart: None 

これは決して動作しませんか?私は本当にフォームの本文を、単一の文字列として作成する必要があります。ここでは、パラメータをループし、それぞれの前と後に境界文字列を配置します。そしてもしそうなら、どうしたらいいでしょうか?私はPythonで私のPOSTからそれをどうやって得るのですか?それとも簡単な方法ですか?私は周りを見て、これで多くを見つけることはありません。

btw、私は文字列データが実際に長いので、これを送るより速い方法なので "multipart/form-data"を使用しています。フォームを作成して投稿し、それをiframeにターゲティングすると、私にとってはうまくいっています。しかしここで私はxmlHttpをもっと好む。

答えて

11

Content-Typeヘッダーを自分で設定しないでください。手動で生成されたヘッダに欠けている適切な生成された境界を含めて、データを入力すると正しく設定されます。

specは、.send(FormData)がmultipart/form-dataエンコードを使用することを明確に述べています。

データがいるFormData

であれば要求エンティティ本体がセットフォームデータなどのデータとし、UTF-8の明示的な文字エンコーディングなどでmultipart/form-dataエンコーディング・アルゴリズムを実行した結果とします。

「multipart/form-data;」、U + 0020 SPACE文字、「boundary =」、およびmultipart/form-dataエンコーディングによって生成されたmultipart/form-data境界文字列を連結するとしますアルゴリズム。

+0

私はそれをエンコードしているので、長くすることが心配です。これはフォーム経由で送信するときに問題となり、ヘッダーを設定すると大きな違いが生じました。しかし、多分それはxmlHttpでは起こりませんか? – user984003

+0

編集された回答を参照してください... – nmaier

+0

Ah。本当にありがとう。 – user984003