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
- cgi-bin/upload.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()
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 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))
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
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....
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 ?
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
Merci beaucoup d'avance !
Partager