Я разрабатываю веб-сервер с библиотекой Poco.
Когда мой сервер получает HTTP-запрос с данными формы в режиме GET, я не знаю, как использовать класс HTMLForm
показать список с полученными парами param=value
,
С request.getURI().getQuery()
Я могу получить полную строку.
Я думаю, что я могу разделить строку традиционным способом, используя токенизатор.
Есть ли лучший способ сделать это с помощью Poco?
Спасибо
Хорошо класс HTMLForm наследует от класса NameValueCollection, который реализует итератор, полезный для перемещения по парам «имя = значение».
Это код, который решает мою проблему:
string name;
string value;
HTMLForm form( request );
NameValueCollection::ConstIterator i = form.begin();
while(i!=form.end()){
name=i->first;
value=i->second;
cout << name << "=" << value << endl << flush;
++i;
}
POCO «NameValueCollection» практически идентичен Vettrasoft Z Directory
namevalue_set_o класс, который задокументирован здесь:
http://www.vettrasoft.com/man/zman-strings-namevalue_set.html
который, по крайней мере, предоставляет пример кода. Самая большая проблема у меня с
POCO — это отсутствие примеров или объяснений того, как его использовать (включая
справочные страницы). Для класса набора имен в Z Directory исходный код, эквивалентный приведенному выше, будет выглядеть следующим образом:
using namespace std;
int i, ie;
namevalue_set_o nv;
string_o s = "FOO=BAR;DATE=\"12/21/2012\";HOST=vertigo;OSTYPE=\"Windows Vista\"";
nv.load_from_string(s);
i = 0;
while (i < nv.size())
{
const namevalue_pair_o &item = nv.get(i, &ie);
if (!ie)
cout << item.name() << "=" item.value() << endl << flush;
++i;
}