Есть ли легкий анализатор multipart/form-data на C или C++?

Я рассматриваю интеграцию синтаксического анализа составных данных формы в модуль веб-сервера, чтобы я мог избавить серверные веб-приложения (часто написанные на динамических языках) от синтаксического анализа самих составных данных. Составная грамматика (RFC 2046) выглядит нетривиально, и если я реализую ее вручную, многое может пойти не так. Есть ли уже хороший, легкий анализатор multipart/form-data, написанный на C или C++? Я ищу тот, у которого нет внешних зависимостей, кроме стандартной библиотеки C или C++. Мне не нужна обработка вложений электронной почты, буферизованные классы ввода-вывода, среда выполнения с переносимостью или что-то еще, мне нужен только синтаксический анализ multipart/form-data.

Вещи, которые я рассмотрел:

  • GMime - зависит от бойкости, так что не пойдет.
  • libapreq — слишком большой, зависит от APR, плохо документирован, без модульных тестов.

Я также рассматривал возможность написания синтаксического анализатора с помощью Ragel, но не могу понять, как это сделать, потому что грамматика не статична: граница может изменяться произвольно.


person Hongli    schedule 15.02.2010    source источник
comment
GMime - зависит от бойкости, так что не пойдет. - не хочешь объяснить, почему?   -  person John Zwinck    schedule 15.02.2010
comment
Вы читали эту тему: stackoverflow.com/questions/218089/simple-c-mime-parser ?   -  person Manuel    schedule 15.02.2010
comment
@John: Каждая новая зависимость усложняет установку для моих пользователей, и я хочу свести это к минимуму. На многих серверах не установлен glib. Также каждая новая зависимость увеличивает использование ресурсов. Существует не так много серверных приложений, использующих glib, поэтому, если я завишу от glib, я буду использовать всю потребляемую им память только для анализа некоторых MIME-данных.   -  person Hongli    schedule 16.02.2010
comment
Не могли бы вы использовать GMime и статическую ссылку, чтобы избежать проблем с установкой? Я не уверен на 100%, но я подозреваю, что вы могли бы, и что объем памяти, вероятно, не будет проблемой на большинстве серверов.   -  person John Zwinck    schedule 16.02.2010
comment
Просто к вашему сведению, но накладные расходы от glib крошечные. Кроме того, каждый дистрибутив Linux по умолчанию поставляется с glib, а многие также включают gmime по умолчанию.   -  person jstedfast    schedule 20.02.2012


Ответы (5)


Я знаю, что этому вопросу уже пару лет, но мне нужно было то же самое, и в итоге я использовал это:

https://github.com/iafonov/multipart-parser-c

person James McLaughlin    schedule 12.08.2012
comment
Тем не менее, обязательно проверьте проблемы! Например. граничный термин должен иметь префикс -- уже, иначе он не будет работать. - person Michael Böckling; 12.03.2017

Да, там один. Не секрет, что это мое. Не стесняйтесь использовать его. Ссылка: MPFDParser. У него вообще нет зависимостей.

person Gorelov Grigory    schedule 30.10.2011

mimetic утверждает, что поддерживает его. Я думаю, что GNU cgicc также может его поддерживать.

person Ken Bloom    schedule 08.04.2010

cgicc это поддерживает... Но написан довольно плохо и релится на входной буфер в памяти.

person Artyom    schedule 12.04.2010

это может не отвечать на ваш вопрос напрямую, но рассматривали ли вы хип-хоп для php из facebook?

он преобразует ваш php-код в C++, а затем компилирует с помощью g++.

может сэкономить ваше время при написании чего-то самостоятельно.

person hasan    schedule 14.04.2010