step1下载:
step2:
tar xzf cgicc-X.X.X.tar.gz(用最新版本)
cd cgicc-X.X.X
./configure --prefix=/usr
/var/www/html/testcgi.html:
<html> <head><title>Test CGIcc form</title></head> <body bgcolor="#cccccc" text="#000000"> <h2>Test CGIcc form</h2> <p> <form method="post" action="/cgi-bin/testcgi"> Value : <input type="text" name="value1"> <p> Value : <select name="value2"> <option value= <option value= <option value= </select> <P> Value : <input type="radio" name="value3" value="button1" checked="checked">Button1 <input type="radio" name="value3" value="button2">Button2 <input type="hidden" name="value4" value="data4"> <p> <input type="submit" value="Submit"> </form> </body> </html>
/var/www/cgi-bin/testcgi.cpp
#include <iostream> #include <vector> #include <string> #include "cgicc/CgiDefs.h" #include "cgicc/Cgicc.h" #include "cgicc/HTTPHTMLHeader.h" #include "cgicc/HTMLClasses.h" #include <stdio.h> #include <stdlib.h> using namespace std; using namespace cgicc; // Or reference as cgicc::Cgicc formData; below in object instantiation. int main(int argc, char **argv) { try { Cgicc formData; // Send HTTP header: Content-type: text/html cout << HTTPHTMLHeader() << endl; // Print: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> cout << HTMLDoctype(HTMLDoctype::eStrict) << endl; // Print: <html lang="en" dir="LTR"> 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; cout << h1("This is a demonstration of the GNU CgiCC library") << endl; form_iterator fvalue1 = formData.getElement("value1"); if( !fvalue1->isEmpty() && fvalue1 != (*formData).end()) { cout << "Value1: " << **fvalue1 << endl; } else cout << "No text entered for value1" << endl; cout << p(); form_iterator fvalue2 = formData.getElement("value2"); if( !fvalue2->isEmpty() && fvalue2 != (*formData).end()) { // Note this is just a different way to access the string class. // See the YoLinux GNU string class tutorial. cout << "Value2: " << (**fvalue2).c_str() << endl; } cout << p(); form_iterator fvalue3 = formData.getElement("value3"); if( !fvalue3->isEmpty() && fvalue3 != (*formData).end()) { cout << "Value3: " << **fvalue3 << endl; } cout << p(); form_iterator fvalue4 = formData.getElement("value4"); if( !fvalue4->isEmpty() && fvalue4 != (*formData).end()) { cout << "Value4: " << **fvalue4 << endl; } // Close the HTML document cout << body() << html(); } catch(exception& e) { // handle any errors here. cout << "ERROR!!" << endl; } ; // To avoid Apache errors. }
testcgi testcgi.cpp -lcgicc
访问:
参考:
http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CGI.html
备注:
我虚拟机环境需要开通防火墙:
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
The following paths are for a Red Hat 7.x installation.
- Place web page in: /var/www/html/testcgi.html
- Place cgi in: /var/www/cgi-bin/testcgi
- Start Apache: service httpd start
- Test: http://localhost/testcgi.html