Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

C++ Programming As A Set Of Problems/CGI Script program

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

simple script /* cgi_hello.cpp public domain NB: tested code. */ #include <iostream> using namespace std; void send_CGI_header(){ cout << "Content-type: text/html\n"; cout << "\n"; // this blank line is a necessary part of the CGI protocol. } void send_contents(){ cout << "<!doctype html>\n"; cout << "<html>\n"; cout << "<title>Hello</title>\n"; cout << "<p>Hello, world!\n"; // C strings can, with care, contain double-quote characters, newlines, etc. cout << "<p><a href=\"http://validator.w3.org/check?uri=referer\">"; cout << "Valid.</a>\n"; cout << "</html>\n"; cout << endl; } int main(){ send_CGI_header(); send_contents(); return 0; } Compile this source code into an executable named "test_script.cgi". setup Nearly all web servers support the Common Gateway Interface. Here is some brief notes on how to put a CGI script written in C++ on an Apache server; other web servers are similar. For more details, see the Apache wikibook, section ... , or the analogous documentation for your favorite web server. ... security implications: user "nobody" ... CGI scripts are used to deal with form data submission. Here is an example HTML file that lets the user submit data to a "test_script.cgi" program. <!-- test_form.html --> <html> <form action="test_script.cgi" method="get"> Favorite animal: <input name="favorite_animal" type="text" /> <input type="submit" /> </form> </html> Put the compiled "test_script.cgi" in the appropriate "cgi-bin" directory. Put the "test_form.html" in some convenient location -- typically some other directory on the same server, but it also works if it's on some other server or a file on your local machine. Tweak the "action" property to give a path to the CGI script. testing Fire up your favorite web browser, and point it at the "test_form.html". Click the submit button. The output from the CGI script should be displayed. Click the "Valid" link. static HTML The above script always gives the same output -- if that's really what you want, then a simple static HTML page would give the same results for less effort: <!doctype html> <!-- static_hello.html --> <html> <title>Hello</title> <p>Hello, world! <p><a href="http://validator.w3.org/check?uri=referer">Good.</a> </html> The power of CGI scripts is in doing things that are not possible with a static HTML page. getting input to the script There are several libraries already available to handle the tricky bits of splitting the CGI input into a list of name/val pairs. getcgivars.c from http://www.jmarshall.com/easy/cgi/getcgi.c.txt ... other CGI libraries in C and C++ ... /* cgi_hello.cpp public domain WARNING: untested code. */ ... int main(){ send_CGI_header(); send_contents(); return 0; } A CGI script doesn't use the command-line arguments "argc" or argv". Instead, it gets its input from environment variables -- and, in the case of HTTP PUT or HTTP POST, the program reads user-submitted data from the standard input. Compile this source code into an executable named "test_script.cgi". Use the same test_form.html to test it. Further reading the GET Wikibook looks at CGI scripts from the user side "The World Wide Web Security FAQ": CGI (Server) Scripts "CGI Made Really Easy: or, Writing CGI scripts to process Web forms" by James Marshall. Many people prefer to write CGI scripts in Perl (Perl Programming/CGI), PHP (PHP Programming), Rebol (Rebol Programming), etc. Wikipedia: Common Gateway Interface Wikipedia: query string