带有C ++ CGI脚本输入的异常

时间:2015-03-11 08:23:10

标签: c++ apache cgi

我正在研究一个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>

这将调用一个main.cgi程序,输入中带有“u = Alfred + Bot&amp; p = alfred”。 但是,就我而言,这是错误的。

案例1:没有记忆

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

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

案例2:保存数据

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

在这种情况下,日志文件将包含循环内外的EMPTY LINE。


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

感谢您的任何建议, marqueewinq

1 个答案:

答案 0 :(得分:1)

需要从标准输入读取数据,但程序在到达数据末尾时不会收到EOF,而是在读取指定数量的字节后停止读取,该字节在环境变量“CONTENT_LENGTH”。因此,您应该从标准输入读取getenv(&#34; CONTENT_LENGTH&#34;)字节以接收“post”数据。因此,apache可能无法使用EOF符号终止cin。对他有好处:(