[C / C ++] [CGIcc] GET有效但POST结果出错信息

时间:2011-03-16 14:29:43

标签: c++ apache cgi fastcgi

我是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.
}

有人知道问题是什么吗?

2 个答案:

答案 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中的一个错误。我将在稀树草原上提交一个错误...