Python publier des données à l'aide de mod_wsgi
Ce doit être une question très simple, mais je ne semble pas être en mesure de comprendre.
Je suis en utilisant apache + mod_wsgi pour héberger mon application en python, et je voudrais obtenir le contenu du poste présenté dans l'une des formes -cependant, ni les valeurs de l'environnement, ni sys.stdin contient l'un de ces données. L'esprit de me donner un rapide coup de main?
Edit:
Déjà essayé:
- environ["CONTENT_TYPE"] = "application/x-www-form-urlencoded' (pas de données)
- environ["wsgi.l'entrée"] semble une façon plausible, cependant, les deux environ["wsgi.l'entrée"].read(), et environ["wsgi.l'entrée"].lire(-1) renvoie une chaîne vide (oui, le contenu a été posté, et environ["request_method"] = "post"
OriginalL'auteur Silver Dragon | 2008-12-26
Vous devez vous connecter pour publier un commentaire.
PEP 333 dit vous devez lire environ['wsgi.input'].
J'ai juste sauvé le code suivant et faites apache mod_wsgi l'exécuter. Elle fonctionne.
Vous devez être en train de faire quelque chose de mal.
Cette bloqué, pour moi. Ceci a été résolu en lisant le nombre exact d'octets:
length = int(environ.get('CONTENT_LENGTH', '0'))
et…read(length)
. Ceci est cohérent avec le fait que la documentation liée à n' pas mentionread()
(pas de longueur) que d'avoir à être pris en charge.OriginalL'auteur nosklo
Être conscient que, techniquement parlant, l'appel read() ou lire(-1) sur wsgi.l'entrée est une violation de la WSGI spécification même si Apache/mod_wsgi permet. C'est parce que le WSGI spécification exige que la longueur de l'argument d'être fournis. Le WSGI spécification également dit qu'il ne faut pas lire plus de données que ce qui est spécifié par le CONTENT_LENGTH.
Donc, le code ci-dessus peuvent travailler dans Apache/mod_wsgi, mais il n'est pas portable WSGI code et de s'échouer sur certains autres WSGI implémentations. Pour être correct, de déterminer la longueur du contenu de demande et de l'offre de la valeur à lire().
OriginalL'auteur Graham Dumpleton