我是CGI的新手。我使用Apache v2.2和GNU cgicc v3.2.9。我想使用CGI生成一个简单表单的HTML网页。这项工作的目的是让用户通过点击此CGI上的按钮直接返回“相同”CGI来发送数据。 CGI评估数据并更改网页:
CGI - > CGI - > CGI - > ...
我不能使用简单的HTML页面并将请求发送到cgi,因为之后我创建了一个CGI页面,用户可以再次向此cgi发送请求,这导致了与引入的相同的情况:
HTML - > CGI - > CGI - > CGI - > ...
使用表单方法POST导致服务器错误消息,而GET正常工作:
access.log
[16 / Mar / 2011:15:00:50]“GET /cgi-bin/cgiHandleEvents.cgi HTTP / 1.1“ 200 973
[16 / Mar / 2011:15:00:52]“GET /cgi-bin/cgiHandleEvents.cgi?value1=&value2=option1&value3=button1&value4=data4 HTTP / 1.1“200 973
[16 / Mar / 2011:15:01:34]“GET /cgi-bin/cgiHandleEvents.cgi HTTP / 1.1“ 200 974
[16 / MAR / 2011:15:01:37] “POST /cgi-bin/cgiHandleEvents.cgi HTTP / 1.1“500 538
error.log (由于有关我的stackoverflow信誉的垃圾邮件警告,我将http://缩减为http //
[Wed Mar 16 15:01:37 2011] [错误] [客户端127.0.0.1]过早结束 脚本头:cgiHandleEvents.cgi, 引用者: http // localhost / cgi-bin / cgiHandleEvents.cgi
[Wed Mar 16 15:01:37 2011] [错误] [client 127.0.0.1] \ r \ n,referer: http // localhost / cgi-bin / cgiHandleEvents.cgi
[Wed Mar 16 15:01:37 2011] [错误] [client 127.0.0.1]此应用程序 已请求运行时终止 它以一种不寻常的方式。,引用者: http // localhost / cgi-bin / cgiHandleEvents.cgi
[Wed Mar 16 15:01:37 2011] [错误] [客户端127.0.0.1]请联系 应用程序的支持团队了解更多信息 信息。\ r,referer: http // localhost / cgi-bin / cgiHandleEvents.cgi
[Wed Mar 16 15:01:37 2011] [错误] [client 127.0.0.1]终止被叫 投掷一个实例后 'std :: runtime_error'\ r \ n,referer: http // localhost / cgi-bin / cgiHandleEvents.cgi
[Wed Mar 16 15:01:37 2011] [错误] [client 127.0.0.1] what():I / O. 错误\ r \ n,referer: HTTP本地主机// /的cgi-bin / cgiHandleEvents.cgi
当前代码不包含消息处理程序。在我看来,POST应该只是重新加载页面。要检查代码,您可以交换包含不同表单方法的行。
#include "cgicc/CgiDefs.h"
#include "cgicc/Cgicc.h"
#include "cgicc/HTTPHTMLHeader.h"
#include "cgicc/HTMLClasses.h"
using namespace std;
using namespace cgicc;
int main()
{
Cgicc formData;
Cgicc cgi;
cout<< HTTPHTMLHeader() << endl;
cout<< HTMLDoctype(HTMLDoctype::eStrict) << endl;
cout<< html().set("lang", "EN").set("dir", "LTR") << endl;
// Set up the HTML document
cout<< html() << head() << title("Cgicc example") << head() << endl;
cout<< body().set("bgcolor","#cccccc").set("text","#000000").set("link","#0000ff").set("vlink","#000080") << endl;
try
{
cout<< h2("Test CGIcc form") << endl;
cout<< "GNU cgicc v" << cgi.getVersion() << "<BR>" << endl;
//cout<< "<form method=\"post\" action=\"cgiHandleEvents.cgi\">"<< endl;
cout<< "<form method=\"get\" action=\"cgiHandleEvents.cgi\">"<< endl;
cout<< " Value 1:" << endl;
cout<< " <input type=\"text\" name=\"value1\">" << endl;
cout<< " <p></p>" << endl;
cout<< " Value 2:" << endl;
cout<< " <select name=\"value2\">" << endl;
cout<< " <option value=\"option1\">Option 1" << endl;
cout<< " <option value=\"option2\">Option 2" << endl;
cout<< " <option value=\"option3\">Option 3" << endl;
cout<< " </select>" << endl;
cout<< " <p></p>" << endl;
cout<< " Value 3:" << endl;
cout<< " <input type=\"radio\" name=\"value3\" value=\"button1\" checked=\"checked\">Button1" << endl;
cout<< " <input type=\"radio\" name=\"value3\" value=\"button2\">Button2" << endl;
cout<< " <input type=\"hidden\" name=\"value4\" value=\"data4\">" << endl;
cout<< " <p></p>" << endl;
cout<< " <input type=\"submit\" value=\"Submit\">" << endl;
cout<< "</form>" << endl;
}
catch(exception& e)
{
// handle any errors here.
cout<< h2("ERROR!!!") << endl;
}
// Close the HTML document
cout << body() << html();
return 0; // To avoid Apache errors.
}
有人知道问题是什么吗?
答案 0 :(得分:2)
我知道这是一个非常晚的回复,但也许它可以帮助别人。
昨天我第一次开始使用C ++ Cgi脚本。我发现在使用POST方法提交数据的同时在代码中多次声明Cgicc(GET工作正常)也给我带来了同样的问题。它通过全局声明Cgicc来解决,因此在代码中只有一次。
答案 1 :(得分:0)
我发现了错误。第一个错误是格式错误的HTML。请注意html的开始和结束标记,而不是包含完整的html页面!
cout<< html().set("lang", "EN").set("dir", "LTR") << endl;
// Set up the HTML document
cout<< html() << head() << title("Cgicc example") << head() << endl;
第二个错误似乎是
Cgicc formData;
我不知道为什么会导致错误。但如果我不使用它,POST请求工作正常。如果我三思而后行,就有2个Cgicc实例是没有意义的。这是我的错。米(
但我认为这是cgicc中的一个错误。我将在稀树草原上提交一个错误...