Imprimer HTTP brut demande en Flacon ou WSGI
Je suis le débogage d'un microcontrôleur j'ai construit ce qui est écrit premières requêtes HTTP, ligne par ligne. Je suis à l'aide de Flacon pour mon serveur et je voudrais voir la totalité de la demande telle qu'elle apparaît dans ce format:
GET / HTTP/1.1
Content-length: 123
User-agent: blah
...
Je sais Flacon est basé sur WSGI. Est-il de toute façon à obtenir que cela fonctionne avec Flacon?
Vous devez vous connecter pour publier un commentaire.
Avec flacon, vous avez accès à l'objet de la requête qui contient tous les HTTP détails:
all the HTTP details
comme spécifié. L'utilisation d'autres propriétés de la requête n'a pas également de l'aide (par exemple, les données, la forme, les valeurs, etc). Pour imprimer la requête HTTP dans son intégralité, l'enroulant autour de WSGI suggéré par @martinpieters réponse est le chemin à parcourir.Oui, le Flacon est une application WSGI, de sorte qu'il est trivial pour envelopper votre application en une couche supplémentaire qui enregistre la demande:
Ceci définit un morceau de middleware pour envelopper votre Flacon d'application. L'avantage est qu'il fonctionne de façon entièrement indépendante de la Fiole, vous donnant non filtrée aperçu de ce qui entre et ce qui sort.
La manière dont vous appliquez le middleware dépend de la précision de la WSGI serveur que vous utilisez; voir votre WSGI de la documentation du serveur.
Lors de l'exécution de Fiole avec le serveur intégré (
app.run()
), faites:Le petit
app.wsgi_app
emballage danse des lieux de laLoggingMiddleware
autour de la Fiole application WSGI.La sortie passe à l'
wsgi.error
cours d'eau, où que se termine dépend encore une fois sur votre serveur WSGI;mod_wsgi
met cela dans le journal des erreurs d'Apache pour votre site, livré en Flacon server imprime cestderr
.suppose que si vous voulez en savoir plus,
Il y a un autre moyen
headers
n'est même pas une touche; il estenviron
clé qui contient un mélange de choses différentes, y compris les en-têtes, mais certainement pas la totalité de la demande d'origine.pprint.pformat(request.__dict__, depth=5))
après l'importationpprint
je voisenviron
que la première clé imprimée pour moi.Ce n'utilisez pas de flacon, mais il est assez simple à installer un socket serveur echo.
Pourquoi pas?
J'ai utilisé les en-têtes, mais vous pouvez utiliser la même approche pour imprimer n'importe quel attribut de la demande. Les docs sont ici: http://flask.pocoo.org/docs/0.12/api/#flask.Request.
Aussi vous avez besoin pour l'installation de FLASK_DEBUG=1 Fiole.enregistreur.débogage de travail, ce qui est agréable car vous pouvez le désactiver dans la production.
Ce qui concerne,