Обработка форм модуля Apache в C

Я реализую модуль 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 может более легко получить доступ? Я не могу найти ничего подходящего, но это похоже на обычную потребность, для которой должно быть решение.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
1 089
3

Ответы 3

Хотя на первый взгляд это может показаться обычным явлением, обработчики содержимого в стиле cgi в C на apache встречаются довольно редко. Большинство людей просто используют CGI, FastCGI или множество фреймворков, таких как mod_perl.

Большинство модулей C apache, которые я написал, нацелены на изменение конкретного поведения веб-сервера определенными, целевыми способами, которые применимы к каждому запросу.

Если вообще возможно написать свой обработчик вне модуля apache, я бы посоветовал вам следовать этой стратегии.

Это полная противоположность ответу! Почему бы нам не искать простые способы написания модулей Apache, которые выполняют обработку форм на C?

mlibby 20.10.2012 18:08

Написание кода обработки форм на C в Apache похоже на написание приложений пользовательского пространства в виде модулей ядра. Это сложно, потому что этим никто не занимается, и на самом деле это не предназначалось для этой цели.

bmdhacks 28.10.2012 06:13

Я знаю, что этот вопрос довольно старый, но теперь, в 2012 году, можно выполнять синтаксический анализ форм с использованием функций API Apache, поэтому я думаю, что идея о том, что модуль Apache не должен выполнять синтаксический анализ формы, устарела. Идея написания обработчиков контента в виде модулей Apache, возможно, необычна, но могут быть случаи, когда она имеет наибольший смысл. В любом случае, если образец из книги подходит для задачи, то ответ не «не делай этого», а «да, это самый простой способ сделать это».

mlibby 31.10.2012 20:03

Справедливо. Так что, хотя есть ответ о том, как это сделать, я все же не рекомендую его, как человека, у которого есть несколько исправлений для проекта. Если вы хотите разобраться в C, это, вероятно, для скорости, и в этом случае более легкий веб-сервер, такой как nginx, является лучшим подходом.

bmdhacks 01.11.2012 05:23

Я знаю, что в моем случае желание попасть в С, вероятно, больше похоже на «психическое заболевание», чем на что-либо еще. ;) Спасибо, что упомянули nginx. Интересная альтернатива.

mlibby 04.11.2012 00:04

Я переключился на 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)

ddoxey 19.11.2014 20:18

Я еще не пробовал никакого решения, так как я нашел этот SO-вопрос в результате моего собственного разочарования в примере из книги «Модули Apache». Но вот что я пока нашел. Я обновлю этот ответ, когда изучу больше.

К счастью, похоже, что теперь это решенная проблема в Apache 2.4 с помощью функции ap_parse_form_data.

Не знаю, насколько хорошо это работает по сравнению с вашим примером, но вот гораздо более лаконичная функция read_post.

Также возможно, что mod_form может иметь значение.

Другие вопросы по теме