J'ai un problème avec la gestion de l'encodage de transfert en morceaux (chunked) HTTP.
Je suis en train d'utiliser :
- apache.
- le plugin mod_wsgi.
- django.
Django est seulement capable de gérer des requêtes HTTP régulières avec le champ d'en-tête Content-Length, mais lorsqu'il s'agit de gérer TE (Transfer-Encoding), chunked ou gzip, il renvoie un résultat vide.
Je pense à 2 approches :
- Faire quelques modifications au fichier python django.wsgi
- Ajouter un fichier middleware python à django pour intercepter toute demande HTTP en morceaux, la convertir en une demande HTTP régulière avec le champ d'en-tête Content-Length, puis la transmettre à django où elle pourra être traitée correctement.
Quelqu'un peut aider avec l'une des 2 options ci-dessus (d'autres options sont bien sûr les bienvenues)
Merci!
Ceci est une extension à ma question après la première réponse de Graham:
Tout d'abord, merci pour votre réponse rapide. Le client utilisé est Axis, qui fait partie du système d'une autre entreprise communiquant avec le nôtre. J'avais défini WSGIChunkedRequest On
, j'ai également apporté quelques modifications à mon wrapper wsgi comme ceci :
def application(environ, start_response):
if environ.get("mod_wsgi.input_chunked") == "1":
stream = environ["wsgi.input"]
print stream
print 'type: ', type(stream)
length = 0
for byte in stream:
length+=1
environ["CONTENT_LENGTH"] = len(stream.read(length))
django_application = get_wsgi_application()
return django_application(environ, start_response)
mais cela me donne ces erreurs (extraites du fichier error.log d'apache):
[Sat Aug 25 17:26:07 2012] [error]
[Sat Aug 25 17:26:07 2012] [error] type:
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] mod_wsgi (pid=27210): Une exception s'est produite lors du traitement du script WSGI '/..../wsgi.py'.
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] Traceback (dernier appel le plus récent) :
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] Fichier "/..../wsgi.py", ligne 57, dans l'application
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] pour octet dans le flux:
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] IOError: erreur de lecture des données de la demande
Qu'est-ce que je fais de mal ?!