我正在使用 Poco 库开发一个 Web 服务器。当我的服务器在 GET 模式下接收到带有表单数据的 HTTP 请求时,我不知道如何使用该类HTMLForm
来显示带有接收对的列表param=value
。
有了request.getURI().getQuery()
我就能得到完整的字符串。我想我可以使用标记器以传统方式拆分字符串。
有没有更好的方法来使用 Poco 呢?谢谢
我正在使用 Poco 库开发一个 Web 服务器。当我的服务器在 GET 模式下接收到带有表单数据的 HTTP 请求时,我不知道如何使用该类HTMLForm
来显示带有接收对的列表param=value
。
有了request.getURI().getQuery()
我就能得到完整的字符串。我想我可以使用标记器以传统方式拆分字符串。
有没有更好的方法来使用 Poco 呢?谢谢
好的,类HTMLForm继承自类NameValueCollection,它实现了一个迭代器,用于在“name=value”对中移动。
这是解决我的问题的代码:
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 版本 1.11.0-all (2021-06-28) 你可以这样做:
const Poco::URI Uri(request.getURI());
const Poco::URI::QueryParameters QueryParms = Uri.getQueryParameters();
Poco::URI::QueryParameters
是:
std::vector<std::pair<std::string, std::string>>
POCO "NameValueCollection" 与 Vettrasoft Z Directory namevalue_set_o 类几乎相同,此处记录:
http://www.vettrasoft.com/man/zman-strings-namevalue_set.html
至少提供了一些示例代码。我对 POCO 的最大问题是缺乏关于如何使用它的示例或解释(包括参考手册页)。对于 Z 目录的名称-值集类,与上面等效的源代码如下所示:
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;
}