Я реализую модуль Apache 2.0.x на C, чтобы взаимодействовать с существующим у нас продуктом. Мне нужно обрабатывать данные FORM, скорее всего, с помощью POST, но я хочу также обработать случай GET.
В книге Ника Кью Модули Apache есть раздел, посвященный обработке данных форм. Он предоставляет примеры кода для POST и GET, которые возвращают apr_hash_t пар ключ + значение в форме. parse_form_from_POST упорядочивает бригаду корзин и объединяет ее в буфер, в то время как parse_form_from_GET может просто ссылаться на URL. Обе подпрограммы полагаются на подпрограмму parse_form_from_string для обхода каждого поля с разделителями и извлечения информации в хеш-таблицу.
Это было бы хорошо, но похоже, что должен быть более простой способ сделать это, чем добавить пару сотен строк кода в мой модуль. Есть ли в apache, apr или apr-util существующий модуль или процедуры для извлечения имен полей и связанных данных из GET или POST FORM в структуру, к которой код C может более легко получить доступ? Я не могу найти ничего подходящего, но это похоже на обычную потребность, для которой должно быть решение.





Хотя на первый взгляд это может показаться обычным явлением, обработчики содержимого в стиле cgi в C на apache встречаются довольно редко. Большинство людей просто используют CGI, FastCGI или множество фреймворков, таких как mod_perl.
Большинство модулей C apache, которые я написал, нацелены на изменение конкретного поведения веб-сервера определенными, целевыми способами, которые применимы к каждому запросу.
Если вообще возможно написать свой обработчик вне модуля apache, я бы посоветовал вам следовать этой стратегии.
Написание кода обработки форм на C в Apache похоже на написание приложений пользовательского пространства в виде модулей ядра. Это сложно, потому что этим никто не занимается, и на самом деле это не предназначалось для этой цели.
Я знаю, что этот вопрос довольно старый, но теперь, в 2012 году, можно выполнять синтаксический анализ форм с использованием функций API Apache, поэтому я думаю, что идея о том, что модуль Apache не должен выполнять синтаксический анализ формы, устарела. Идея написания обработчиков контента в виде модулей Apache, возможно, необычна, но могут быть случаи, когда она имеет наибольший смысл. В любом случае, если образец из книги подходит для задачи, то ответ не «не делай этого», а «да, это самый простой способ сделать это».
Справедливо. Так что, хотя есть ответ о том, как это сделать, я все же не рекомендую его, как человека, у которого есть несколько исправлений для проекта. Если вы хотите разобраться в C, это, вероятно, для скорости, и в этом случае более легкий веб-сервер, такой как nginx, является лучшим подходом.
Я знаю, что в моем случае желание попасть в С, вероятно, больше похоже на «психическое заболевание», чем на что-либо еще. ;) Спасибо, что упомянули nginx. Интересная альтернатива.
Я переключился на G-WAN, который предлагает прозрачный интерфейс сценариев ANSI C для форм GET и POST (и многие другие полезности, такие как диаграммы, ввод-вывод GIF и т. д.).
Несколько примеров AJAX доступны на Страница разработчика GWAN
Надеюсь, это поможет!
Я не думаю, что этот ответ касается вопроса OP о написании модулей Apache на C, где версия Apache предшествует введению функции ap_parse_form_data (). (см. ap_mmn.h 20110203.2 2.3.11-dev)
Я еще не пробовал никакого решения, так как я нашел этот SO-вопрос в результате моего собственного разочарования в примере из книги «Модули Apache». Но вот что я пока нашел. Я обновлю этот ответ, когда изучу больше.
К счастью, похоже, что теперь это решенная проблема в Apache 2.4 с помощью функции ap_parse_form_data.
Не знаю, насколько хорошо это работает по сравнению с вашим примером, но вот гораздо более лаконичная функция read_post.
Это полная противоположность ответу! Почему бы нам не искать простые способы написания модулей Apache, которые выполняют обработку форм на C?