web-dev-qa-db-fra.com

données en plusieurs parties POST en utilisant python: aucune limite en plusieurs parties n'a été trouvée)

J'ai un formulaire-données ainsi qu'un fichier à envoyer dans le même POST. Par exemple, {durée: 2000, fichier: test.wav}. J'ai vu les nombreux threads ici sur la publication multipart/form-data en utilisant python requêtes. Ils étaient utiles, en particulier celui-ci .

Mon exemple de demande est comme ci-dessous:

    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)

Mais lorsque j'exécute le code ci-dessus, j'obtiens cette erreur:

5: 59: 55.338 Dbg 09900 [DEBUG] Résolution de l'exception du gestionnaire [null]: org.springframework.web.multipart.MultipartException: impossible d'analyser la demande de servlet en plusieurs parties; l'exception imbriquée est org.Apache.commons.fileupload.FileUploadException: la demande a été rejetée car aucune limite en plusieurs parties n'a été trouvée.

Mes questions sont donc les suivantes: 1) Comment puis-je voir le contenu de la demande envoyée? Impossible d'utiliser Wirehark, ce n'est pas sur le réseau. 2) Pourquoi la frontière manque-t-elle dans les données codées? Ai-je oublié quelque chose, veuillez le signaler.

27
jeera

Vous ne devez JAMAIS définir cet en-tête vous-même. Nous définissons correctement l'en-tête avec la frontière. Si vous définissez cet en-tête, nous ne le ferons pas et votre serveur ne saura pas à quelle limite s'attendre (car il est ajouté à l'en-tête). Supprimez votre en-tête Content-Type personnalisé et tout ira bien.

43

La suppression de l'en-tête Content-Type avec des "multipart/form-data" explicites a fonctionné!

6
Anirban Kundu

Pour ajouter spécifiquement une limite, ajoutez ce qui suit dans l'en-tête:

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