| 
									
										
										
										
											1999-06-14 19:47:47 +00:00
										 |  |  | \section{\module{CGIHTTPServer} --- | 
					
						
							| 
									
										
										
										
											2000-10-10 16:56:41 +00:00
										 |  |  |          CGI-capable HTTP request handler} | 
					
						
							| 
									
										
										
										
											1999-06-14 19:47:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \declaremodule{standard}{CGIHTTPServer} | 
					
						
							| 
									
										
										
										
											2000-04-03 20:13:55 +00:00
										 |  |  |   \platform{Unix} | 
					
						
							| 
									
										
										
										
											2000-12-01 15:25:23 +00:00
										 |  |  | \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} | 
					
						
							| 
									
										
										
										
											1999-06-14 19:47:47 +00:00
										 |  |  | \modulesynopsis{This module provides a request handler for HTTP servers | 
					
						
							|  |  |  |                 which can run CGI scripts.} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The \module{CGIHTTPServer} module defines a request-handler class, | 
					
						
							|  |  |  | interface compatible with | 
					
						
							| 
									
										
										
										
											2000-07-16 19:01:10 +00:00
										 |  |  | \class{BaseHTTPServer.BaseHTTPRequestHandler} and inherits behavior | 
					
						
							| 
									
										
										
										
											1999-06-14 19:47:47 +00:00
										 |  |  | from \class{SimpleHTTPServer.SimpleHTTPRequestHandler} but can also | 
					
						
							|  |  |  | run CGI scripts. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-04-03 20:13:55 +00:00
										 |  |  | \strong{Note:}  This module is \UNIX{} dependent since it creates the | 
					
						
							|  |  |  | CGI process using \function{os.fork()} and \function{os.exec()}. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-06-14 19:47:47 +00:00
										 |  |  | The \module{CGIHTTPServer} module defines the following class: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{classdesc}{CGIHTTPRequestHandler}{request, client_address, server} | 
					
						
							|  |  |  | This class is used to serve either files or output of CGI scripts from  | 
					
						
							|  |  |  | the current directory and below. Note that mapping HTTP hierarchic | 
					
						
							|  |  |  | structure to local directory structure is exactly as in | 
					
						
							|  |  |  | \class{SimpleHTTPServer.SimpleHTTPRequestHandler}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The class will however, run the CGI script, instead of serving it as a | 
					
						
							|  |  |  | file, if it guesses it to be a CGI script. Only directory-based CGI | 
					
						
							|  |  |  | are used --- the other common server configuration is to treat special | 
					
						
							|  |  |  | extensions as denoting CGI scripts. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The \function{do_GET()} and \function{do_HEAD()} functions are | 
					
						
							|  |  |  | modified to run CGI scripts and serve the output, instead of serving | 
					
						
							|  |  |  | files, if the request leads to somewhere below the | 
					
						
							|  |  |  | \code{cgi_directories} path. | 
					
						
							|  |  |  | \end{classdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The \class{CGIHTTPRequestHandler} defines the following data member: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{memberdesc}{cgi_directories} | 
					
						
							|  |  |  | This defaults to \code{['/cgi-bin', '/htbin']} and describes | 
					
						
							|  |  |  | directories to treat as containing CGI scripts. | 
					
						
							|  |  |  | \end{memberdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The \class{CGIHTTPRequestHandler} defines the following methods: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{do_POST}{} | 
					
						
							|  |  |  | This method serves the \code{'POST'} request type, only allowed for | 
					
						
							|  |  |  | CGI scripts.  Error 501, "Can only POST to CGI scripts", is output | 
					
						
							|  |  |  | when trying to POST to a non-CGI url. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that CGI scripts will be run with UID of user nobody, for security | 
					
						
							|  |  |  | reasons. Problems with the CGI script will be translated to error 403. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For example usage, see the implementation of the \function{test()} | 
					
						
							|  |  |  | function. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{seealso} | 
					
						
							|  |  |  |   \seemodule{BaseHTTPServer}{Base class implementation for Web server | 
					
						
							|  |  |  |                              and request handler.} | 
					
						
							|  |  |  | \end{seealso} |