使用 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。对他有好处:(
我正在编写一个 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。对他有好处:(