2008-09-19 10 views
4

Je suis en train d'implémenter un module Apache 2.0.x en C, pour interfacer avec un produit existant. J'ai besoin de gérer les données FORM, très probablement en utilisant POST mais je veux aussi gérer le cas GET.Module Apache Gestion des formulaires en C

Le livre Apache Modules de Nick Kew contient une section sur la gestion des données de formulaire. Il fournit des exemples de code pour POST et GET, qui renvoient un apr_hash_t des paires clé + valeur dans le formulaire. parse_form_from_POST marshalls la brigade de seau et l'aplatit dans un tampon, tandis que parse_form_from_GET peut simplement référencer l'URL. Les deux routines s'appuient sur une routine parse_form_from_string pour parcourir chaque champ délimité et extraire les informations dans la table de hachage. Ce serait bien, mais il semble qu'il devrait y avoir un moyen plus simple de faire cela que d'ajouter quelques centaines de lignes de code à mon module. Existe-t-il un module ou des routines dans apache, apr ou apr-util pour extraire les noms de champs et les données associées d'un FORMULAIRE GET ou POST dans une structure à laquelle le code C peut plus facilement accéder? Je ne trouve rien de pertinent, mais cela semble être un besoin commun pour lequel il devrait y avoir une solution.

Répondre

0

Alors que, sur sa surface, cela peut sembler commun, les gestionnaires de contenu de style cgi en C sur Apache sont plutôt rares. La plupart des gens utilisent simplement CGI, FastCGI, ou la myriade de frameworks tels que mod_perl.

La plupart des modules C apache que j'ai écrits visent à modifier le comportement particulier du serveur Web de manière spécifique et ciblée, applicable à chaque requête.

S'il est tout à fait possible d'écrire votre gestionnaire en dehors d'un module apache, je vous encourage à poursuivre cette stratégie.

+0

C'est exactement le contraire d'une réponse! Pourquoi ne devrions-nous pas chercher des moyens faciles d'écrire des modules Apache qui forment un traitement en C? – mlibby

+0

L'écriture du code de traitement de formulaire dans C sur Apache est comme écrire des applications d'espace utilisateur sous la forme de modules de noyau. C'est difficile parce que personne ne le fait, et ce n'était pas vraiment prévu à cette fin. – bmdhacks

+0

Je sais que cette question est assez ancienne, mais maintenant en 2012, il est possible de faire l'analyse des formulaires en utilisant les fonctions Apache API, donc je pense que l'idée qu'un module Apache ne devrait pas faire l'analyse syntaxique est démodée. L'idée d'écrire des gestionnaires de contenu en tant que modules Apache est peut-être rare, mais il peut y avoir des cas où cela a le plus de sens. Dans tous les cas, si l'échantillon du livre est adéquat pour la tâche, alors la réponse n'est pas "ne faites pas ceci" c'est "oui, c'est la manière la plus facile de faire ceci". – mlibby

1

Je suis passé à G-WAN qui offre une interface de scripts ANSI C transparente pour les formulaires GET et POST (et bien d'autres choses comme les cartes, les E/S GIF, etc.).

Quelques exemples AJAX sont disponibles à la GWAN developer page

Hope it helps!

+0

Je ne pense pas que cette réponse répond à la question de l'OP sur l'écriture de modules Apache en C, où la version d'Apache est antérieure à l'introduction de la fonction ap_parse_form_data(). (voir ap_mmn.h 20110203.2 2.3.11-dev) – ddoxey

0

Je n'ai pas encore essayé de solution, puisque j'ai trouvé cette question SO en raison de ma propre frustration avec l'exemple dans le livre "Apache Modules". Mais voici ce que j'ai trouvé, jusqu'à présent. Je mettrai à jour cette réponse quand j'ai fait des recherches plus. Heureusement, il semble que ce soit maintenant un problème résolu dans Apache 2.4 en utilisant la fonction ap_parse_form_data.

Aucune idée de comment cela fonctionne bien par rapport à votre exemple, mais voici un much more concise read_post function.

Il est également possible que mod_form puisse être utile.