我正在研究一个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
答案 0 :(得分:1)
需要从标准输入读取数据,但程序在到达数据末尾时不会收到EOF,而是在读取指定数量的字节后停止读取,该字节在环境变量“CONTENT_LENGTH”。因此,您应该从标准输入读取getenv(&#34; CONTENT_LENGTH&#34;)字节以接收“post”数据。因此,apache可能无法使用EOF符号终止cin。对他有好处:(