如何解析 POST 正文 / GET 参数?

发布于 2024-11-01 20:14:47 字数 161 浏览 4 评论 0原文

所以我需要用 N 个参数解析这样的字符串 login=julius&password=zgadnij&otherArg=Value ,并且每个参数都有一个值。您可以在 GET 请求和 POST 请求中找到此类参数。那么如何使用 Boost 为此类字符串创建解析器呢?

So I need to parse such string login=julius&password=zgadnij&otherArg=Value with N args and each arg will have a value. You can find such ti GET arguments and in POST requests. So how to create a parser for such strings using Boost?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

摇划花蜜的午后 2024-11-08 20:14:47
  • & 上拆分
  • = 上拆分结果部分
  • 对名称和值部分进行 URL 解码(!)

无需正则表达式。

  • split on &
  • split the resulting parts on =
  • URL-decode both (!) the name and the value part

No regex needed.

攒一口袋星星 2024-11-08 20:14:47

在这个问题的情况下,正如Tomalak提到的,正则表达式可能是
有点矫枉过正。
如果您的实际输入更复杂并且需要正则表达式,那么
下面的代码说明一下用法?

int main() {
  using namespace std;
  using namespace boost;
  string s = "login=julius&password=zgadnij&otherArg=Value";
  regex re_amp("&"), re_eq("=");
  typedef sregex_token_iterator sti;
  typedef vector< string > vs;
  typedef vs::iterator vsi;
  sti i( s.begin(), s.end(), re_amp, -1 ), sti_end;
  vs config( i, sti_end ); // split on &

  for ( vsi i = config.begin(), e = config.end();  i != e;  ++ i ) {
    // split on =
    vs setting( sti( i->begin(), i->end(), re_eq, -1 ), sti_end );
    for ( vsi i2 = setting.begin(), e2 = setting.end();  i2 != e2;  ++ i2 ) {
      cout<< *i2 <<endl;
    }
  }
}

希望这有帮助

In this question's case, as Tomalak mentioned, regular expression may be a
little overkill.
If your real input is more complex and regular expression is needed, does
the following code illustrate the usage?

int main() {
  using namespace std;
  using namespace boost;
  string s = "login=julius&password=zgadnij&otherArg=Value";
  regex re_amp("&"), re_eq("=");
  typedef sregex_token_iterator sti;
  typedef vector< string > vs;
  typedef vs::iterator vsi;
  sti i( s.begin(), s.end(), re_amp, -1 ), sti_end;
  vs config( i, sti_end ); // split on &

  for ( vsi i = config.begin(), e = config.end();  i != e;  ++ i ) {
    // split on =
    vs setting( sti( i->begin(), i->end(), re_eq, -1 ), sti_end );
    for ( vsi i2 = setting.begin(), e2 = setting.end();  i2 != e2;  ++ i2 ) {
      cout<< *i2 <<endl;
    }
  }
}

Hope this helps

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文