2

Pocoライブラリを使用してWebサーバーを開発しています。HTMLFormサーバーがGETモードでフォームデータを含むHTTPリクエストを受信すると、クラスを使用して受信したペアのリストを表示する方法がわかりませんparam=value

request.getURI().getQuery()私は完全な文字列を取得することができます。トークナイザーを使用して、従来の方法で文字列を分割できると思います。

Pocoを使用してそれを行うためのより良い方法はありますか?ありがとう

4

3 に答える 3

2

わかりました。クラス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;
}
于 2012-11-15T20:09:51.817 に答える
1

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>>
于 2021-08-24T07:49:14.573 に答える
0

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;
}
于 2013-04-17T20:19:16.570 に答える