J'utilise Y a-t-il un moyen facile de faire cela? P> Python -M SimpleHttpServer code> Pour servir un répertoire pour les tests locaux dans un navigateur Web. Une partie du contenu comprend de grands fichiers de données. Je voudrais pouvoir les gzip et avoir SimpleHttpServer les servir avec un encodage de contenu: gzip. p>
6 Réponses :
de la recherche sur SimpleHttpServer's Documentation , il n'y a aucun moyen. Cependant, je recommande LightPD avec le module mod_compress . < / p>
C'est une ancienne question, mais il se classe toujours n ° 1 dans Google pour moi, alors je suppose qu'une réponse appropriée pourrait être utile à quelqu'un à côté de moi. em> La solution se révèle Soyez très simple. Dans le do_get (), do_post, etc., il vous suffit d'ajouter ce qui suit: p> def gzipencode(self, content):
import StringIO
import gzip
out = StringIO.StringIO()
f = gzip.GzipFile(fileobj=out, mode='w', compresslevel=5)
f.write(content)
f.close()
return out.getvalue()
Bien sûr, les ci-dessus étaient des pâtes-pâtes de ce code. Mais là encore, les extraits ci-dessus disent tout le tout et le code de fonctionnement complet sert également de pont JSON qui ferait un peu flou le purpouse de cette question. Quoi qu'il en soit, déposez-moi un courrier si vous avez besoin de plus d'informations ou du code.
Étant donné que c'était le premier résultat de Google, j'ai pensé que je posterais ma modification simple au script qui a gzip au travail. P>
bâtiment sur @velis répondant ci-dessus, voici comment je le fais. Gzipping De petites données ne valent pas la peine et peuvent augmenter sa taille. Testé avec le client DALVIK.
def do_GET(self): ... get content self.send_response(returnCode) # 200, 401, etc ...your other headers, etc... if len(content) > 100: # don't bother compressing small data if 'accept-encoding' in self.headers: # case insensitive if 'gzip' in self.headers['accept-encoding']: content = gzipencode(content) # gzipencode defined above in @velis answer self.send_header('content-encoding', 'gzip') self.send_header('content-length', len(content)) self.end_headers() # send a blank line self.wfile.write(content)
Comme tant d'autres, j'utilise J'ai décidé d'écrire un minuscule outil CLI qui le soutient. C'est aller, donc la procédure d'installation régulière est simplement la suivante: p>
Si vous avez déjà Python -M SimpleHttpServer code> pour les tests locaux également. C'est toujours le résultat supérieur sur Google et, tandis que https://github.com/ksmith97/gzipsimplehttServer est un Solution belle, il applique GZIP même s'il n'est pas demandé et il n'y a pas de drapeau pour activer / désactiver. P>
aller obtenir github.com/rhadih/serve
p>
$ gopath code> ajouté à
$ chemin code>, c'est tout ce dont vous avez besoin. Maintenant, vous avez
servir code> comme une commande. P>
C'était une demande de fonctionnalité mais rejetée en raison de la conservation du simple serveur HTTP simple: HTTPS: // Bugs .pytHon.org / numéro30576 p>
L'auteur d'émission finalement publié une version autonome pour Python 3: https://github.com/pierrequentel/httpcompressionsServer p>
Juste une tête pour les autres. httpCompressionsServer ne lie pas automatiquement l'adresse de la même manière que "http.server". Pour moi, il s'est écrasé. J'ai dû le démarrer avec: python3 -m httpcompressionserver --bind 0.0.0.0 Voir: Github.com / Pierrequentel / httpCompressionsServer / Problèmes / 2
Cela aurait dû être corrigé sur PYPI. Contactez l'auteur s'il n'a pas.