IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques Discussion :

[Apache httpd] Lire le body de la requête HTTP reçue par un module Apache


Sujet :

Bibliothèques

  1. #1
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Points : 215
    Points
    215
    Par défaut [Apache httpd] Lire le body de la requête HTTP reçue par un module Apache
    Bonjour,

    J'ai développé en C++ un module Apache recevant une requête HTTP envoyée en POST.
    Ce module récupère le body de la requête HTTP sous forme d'une chaîne de caractères qu'il va ensuite utiliser dans un traitement métier.
    Toutefois, il arrive parfois que la lecture de la chaîne de caractères en question soit tronquée !

    Je m'explique davantage :
    Le module Apache lit le header "Content-Length" et obtient par exemple la valeur 5879, ce qui signifie que le body de la requête HTTP contient 5879 caractères.
    Le module utilise ensuite les fonctions ap_setup_client_block(), ap_should_client_block() et ap_get_client_block() pour lire le body de la requête HTTP.
    Le plus souvent, les 5879 caractères du body de la requête HTTP sont effectivement lus.
    Mais dans certains cas, le body d'une requête HTTP qui a pu être correctement lue plusieurs fois va de temps en temps être tronqué à 3760 ou à 4380 caractères...

    À noter qu'il ne s'agit pas d'un problème d'envoi de la requête HTTP car j'ai inséré un système de monitoring et la requête HTTP monitorée est bel et bien complète à chaque fois.

    J'ai essayé de remonter la pile d'appel de la fonction get_client_block(), d'où me semble provenir mon problème, dans les sources d'Apache, mais j'avoue que je m'y perds un peu...

    Quelqu'un saurait-il m'expliquer ce qui se passe de temps en temps pour que le body de la requête HTTP ne soit pas lu correctement ou bien me conseiller sur une éventuelle autre librairie à utiliser pour lire correctement le body de la requête HTTP sans problèmes ?

    Merci à vous !

  2. #2
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Points : 215
    Points
    215
    Par défaut
    Il suffisait d'appeler la fonction ap_get_client_block() dans une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    string body = "";
    char * httpRequestBody = new char[httpRequestBodyLength + 1];
    while(ap_get_client_block(httpRequest, httpRequestBody, httpRequestBodyLength) > 0)
    {
    	if(httpRequestBody != NULL)
    	{
    		body += string(httpRequestBody);
    	}
    }
    EDIT : Je me suis rendu compte après coup que j'avais oublié de cliquer sur Résolu, mais je vois qu'on l'a fait pour moi, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/01/2016, 17h07
  2. Capturer les requêtes http reçues sur Jonas
    Par amad206 dans le forum JOnAS
    Réponses: 11
    Dernier message: 23/01/2009, 10h02
  3. Requête HTTP multiples et Apache
    Par TitAnz35 dans le forum Apache
    Réponses: 2
    Dernier message: 16/02/2007, 21h39
  4. [debutant] pb config apache httpd.conf
    Par Prophetis dans le forum Apache
    Réponses: 4
    Dernier message: 21/05/2006, 18h15
  5. Question apache -> httpd.conf
    Par AurelBUD dans le forum Apache
    Réponses: 1
    Dernier message: 23/09/2005, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo