使用 C++ CGI 脚本输入异常

Anomaly with a input with C++ CGI script

我正在编写一个 CGI 脚本,它将在服务器上授权一个人。 我正在使用 Ubuntu 的 apache2 服务器提供的 CGI 在 C++ 上编写此代码。

但是,我遇到了一个我无法理解的奇怪异常。

案例如下: 如你所知,当我有一个 HTML 像:

<form method = "post" action = "./cgi-bin/main.cgi?a=auth">
    u: <input type = "text" name = "u" value = "Alfred Bot"> <br>
    p: <input type = "password" name = "p" value = "alfred"> <br>
    <input type = "submit" value = "Accept">
</form>

这将召回输入为 "u=Alfred+Bot&p=alfred" 的 main.cgi 程序。 但是,就我而言,这是错误的。

案例 1:没有记忆

string s;
while (!cin.eof()) {
    cin >> s;
    cerr << s << "\n";
}

在这种情况下,日志文件将包含所需的行 "u=Alfred+Bot&p=alfred"。

案例 2:保存数据

while (!cin.eof()) {
    cin >> s;
    cerr << s << "\n";
    form_output += string(s);
}
cerr << "\"" << form_output << "\".\n";

在这种情况下,日志文件将包含一个 EMPTY LINE,无论是在循环中还是在循环之后。


我尝试了其他各种方法,包括 stringstreams 和 scanf read,但结果保持不变:每当我尝试记住输入时,它都是无效的。

感谢您的任何建议, 跑马灯

需要从标准输入读取数据,但程序在到达数据末尾时不会收到EOF,而是应该在读取指定数量的字节后停止读取,这是定义的在环境变量“CONTENT_LENGTH”中。所以你应该从标准输入读取 getenv("CONTENT_LENGTH") 字节来接收“post”数据。因此,apache 可能不会终止带有 EOF 符号的 cin。对他有好处:(