Pocoライブラリを使用してWebサーバーを開発しています。HTMLForm
サーバーがGETモードでフォームデータを含むHTTPリクエストを受信すると、クラスを使用して受信したペアのリストを表示する方法がわかりませんparam=value
。
でrequest.getURI().getQuery()
私は完全な文字列を取得することができます。トークナイザーを使用して、従来の方法で文字列を分割できると思います。
Pocoを使用してそれを行うためのより良い方法はありますか?ありがとう
Pocoライブラリを使用してWebサーバーを開発しています。HTMLForm
サーバーがGETモードでフォームデータを含むHTTPリクエストを受信すると、クラスを使用して受信したペアのリストを表示する方法がわかりません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で抱えている最大の問題は、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;
}