Bonjour à tous,
j'ai créé un simple serveur python à l'aide de la bibliothèque http.server, contenant un script cgi pour gérer l'upload de fichiers:

- serveur.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
import http.server
 
server = http.server.HTTPServer
handler = http.server.CGIHTTPRequestHandler
handler.cgi_directories = ["/cgi-bin"]
 
httpd = server(("", 80), handler)
print("Serveur actif sur le port 80")
 
httpd.serve_forever()
- cgi-bin/upload.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
import cgi,os
 
form = cgi.FieldStorage()
 
fichier=form["file_upload"]
f=open(fichier.filename,'wb')
f.write(fichier.value)
f.close()
 
print("Content-type: text/html; charset=utf-8\n")
print("longueur fichier reçu: ",len(fichier.value))
Pour uploader un fichier mp3 de 500 kio j'envoie la requête suivante (L'adresse IP (je n'utilise ce serveur qu'en local) de ma machine est 192.168.1.16) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
POST /cgi-bin/upload.py HTTP/1.1
Host: 192.168.1.16
Content-Length: 512213
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary8B5Ap4DvjA2ngRqT
Origin: http://192.168.1.16
Referer: http://192.168.1.16/
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
 
------WebKitFormBoundary8B5Ap4DvjA2ngRqT
Content-Disposition: form-data; name="file_upload"; filename="nom_fichier.mp3"
Content-Type: application/octet-stream
 
...données binaires de longueur 500 kio....
Quand j'envoie cette requête depuis la même machine que celle qui contient le serveur je n'ai aucun souci, un fichier nom_fichier.mp3 de 500 kio est bien créé côté serveur et j'ai bien la réponse suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
HTTP/1.0 200 Script output follows
Server: SimpleHTTP/0.6 Python/3.7.3
Date: Wed, 29 Jul 2020 10:03:16 GMT
Content-type: text/html; charset=utf-8
 
longueur fichier reçu:  512000
Cependant quand j'effectue la même requête depuis une autre machine du même réseau local, le fichier créé ne fait une longueur que de quelques dizaines de kio (longueur d'ailleurs variable, pour toujours la même requête), et dans la réponse j'ai effectivement cette même longueur (variable) de quelques dizaines de kio. J'ai donc l'impression qu'une partie de la requête est tronquée de manière un peu aléatoire mais je n'arrive pas du tout à savoir pourquoi ? Quelqu'un peut-il m'éclairer ?
Merci beaucoup d'avance !