web-dev-qa-db-ja.com

マルチパートデータPOST使用pythonリクエスト:マルチパート境界が見つかりませんでした

同じPOSTで送信されるフォームデータとファイルがあります。例:{duration:2000、file:test.wav}。 pythonリクエストを使用したmultipart/form-dataの投稿で、多くのスレッドを確認しました。特に this one は有用でした。

私のサンプルリクエストは以下の通りです:

    files = {'file': ('wavfile', open(filename, 'rb'))}
    data = {'duration': duration}
    headers = {'content-type': 'multipart/form-data'}
    r = self.session.post(url, files=files, data=data, headers=headers)

しかし、上記のコードを実行すると、次のエラーが発生します。

5:59:55.338 Dbg 09900 [DEBUG]ハンドラー[null]からの例外の解決:org.springframework.web.multipart.MultipartException:マルチパートサーブレットリクエストを解析できませんでした。ネストされた例外はorg.Apache.commons.fileupload.FileUploadExceptionです。マルチパート境界が見つからなかったため、リクエストは拒否されました。

だから私の質問は次のとおりです。1)送信されているリクエストの内容を確認するにはどうすればよいですか? Wiresharkを使用できませんでした。ネットワーク全体では使用できません。 2)エンコードされたデータに境界がないのはなぜですか?私は何かを逃したか、指摘してください。

27
jeera

このヘッダーを自分で設定してはいけません。ヘッダーを境界で適切に設定します。そのヘッダーを設定した場合、ヘッダーは追加されるため、予期されない境界がサーバーに認識されることはありません。カスタムContent-Typeヘッダーを削除すれば大丈夫です。

明示的な「multipart/form-data」を使用してContent-Typeヘッダーを取り出すと、うまくいきました。

6
Anirban Kundu

具体的に境界を追加するには、ヘッダーに以下を追加します。

headers = {
    'content-type': 'multipart/form-data; boundary=ebf9f03029db4c2799ae16b5428b06bd'
}
0
jeet.chanchawat