9
votes

Comment utiliser le contenu-encodage: GZIP avec Python SimpleHttpServer

J'utilise Python -M SimpleHttpServer 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.

Y a-t-il un moyen facile de faire cela?


0 commentaires

6 Réponses :


-1
votes

de la recherche sur SimpleHttpServer's Documentation , il n'y a aucun moyen. Cependant, je recommande LightPD avec le module mod_compress . < / p>


0 commentaires

12
votes

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()


1 commentaires

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.



8
votes

É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.

https://github.com/ksmith97/gzipsimplehttpServer


0 commentaires

1
votes

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)


0 commentaires

5
votes

Comme tant d'autres, j'utilise Python -M SimpleHttpServer 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.

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:

aller obtenir github.com/rhadih/serve

Si vous avez déjà $ gopath ajouté à $ chemin , c'est tout ce dont vous avez besoin. Maintenant, vous avez servir comme une commande.

https://github.com/rhardih/serve


0 commentaires

1
votes

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

L'auteur d'émission finalement publié une version autonome pour Python 3: https://github.com/pierrequentel/httpcompressionsServer


2 commentaires

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.