blob: 83b6f1fcfb03d325bad526b6e4cf0917c4cb0936 [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{cgi} ---
2 Common Gateway Interface support.}
Fred Drakeb91e9341998-07-23 17:59:49 +00003\declaremodule{standard}{cgi}
4
Fred Drake295da241998-08-10 19:42:37 +00005\modulesynopsis{Common Gateway Interface support, used to interpret
6forms in server-side scripts.}
Fred Drakeb91e9341998-07-23 17:59:49 +00007
Guido van Rossuma12ef941995-02-27 17:53:25 +00008\indexii{WWW}{server}
9\indexii{CGI}{protocol}
10\indexii{HTTP}{protocol}
11\indexii{MIME}{headers}
12\index{URL}
13
Guido van Rossum86751151995-02-28 17:14:32 +000014
Fred Drake8ee679f2001-07-14 02:50:55 +000015Support module for Common Gateway Interface (CGI) scripts.%
Fred Drake6a79be81998-04-03 03:47:03 +000016\index{Common Gateway Interface}
Guido van Rossuma12ef941995-02-27 17:53:25 +000017
Guido van Rossuma29cc971996-07-30 18:22:07 +000018This module defines a number of utilities for use by CGI scripts
19written in Python.
Guido van Rossuma12ef941995-02-27 17:53:25 +000020
Guido van Rossuma29cc971996-07-30 18:22:07 +000021\subsection{Introduction}
Fred Drake12d9fc91998-04-14 17:19:54 +000022\nodename{cgi-intro}
Guido van Rossuma12ef941995-02-27 17:53:25 +000023
Guido van Rossuma29cc971996-07-30 18:22:07 +000024A CGI script is invoked by an HTTP server, usually to process user
Fred Drake637af131998-08-21 20:02:06 +000025input submitted through an HTML \code{<FORM>} or \code{<ISINDEX>} element.
Guido van Rossuma29cc971996-07-30 18:22:07 +000026
Fred Drakea2e268a1997-12-09 03:28:42 +000027Most often, CGI scripts live in the server's special \file{cgi-bin}
Guido van Rossuma29cc971996-07-30 18:22:07 +000028directory. The HTTP server places all sorts of information about the
29request (such as the client's hostname, the requested URL, the query
30string, and lots of other goodies) in the script's shell environment,
31executes the script, and sends the script's output back to the client.
32
33The script's input is connected to the client too, and sometimes the
34form data is read this way; at other times the form data is passed via
Fred Drake6ef871c1998-03-12 06:52:05 +000035the ``query string'' part of the URL. This module is intended
Guido van Rossuma29cc971996-07-30 18:22:07 +000036to take care of the different cases and provide a simpler interface to
37the Python script. It also provides a number of utilities that help
38in debugging scripts, and the latest addition is support for file
Fred Drake6ef871c1998-03-12 06:52:05 +000039uploads from a form (if your browser supports it --- Grail 0.3 and
Guido van Rossuma29cc971996-07-30 18:22:07 +000040Netscape 2.0 do).
41
42The output of a CGI script should consist of two sections, separated
43by a blank line. The first section contains a number of headers,
44telling the client what kind of data is following. Python code to
45generate a minimal header section looks like this:
Guido van Rossuma12ef941995-02-27 17:53:25 +000046
Fred Drake19479911998-02-13 06:58:54 +000047\begin{verbatim}
Moshe Zadkaa1a4b592000-08-25 21:47:56 +000048print "Content-Type: text/html" # HTML is following
Guido van Rossume47da0a1997-07-17 16:34:52 +000049print # blank line, end of headers
Fred Drake19479911998-02-13 06:58:54 +000050\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +000051
Guido van Rossuma29cc971996-07-30 18:22:07 +000052The second section is usually HTML, which allows the client software
53to display nicely formatted text with header, in-line images, etc.
54Here's Python code that prints a simple piece of HTML:
Guido van Rossum470be141995-03-17 16:07:09 +000055
Fred Drake19479911998-02-13 06:58:54 +000056\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +000057print "<TITLE>CGI script output</TITLE>"
58print "<H1>This is my first CGI script</H1>"
59print "Hello, world!"
Fred Drake19479911998-02-13 06:58:54 +000060\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +000061
Guido van Rossuma29cc971996-07-30 18:22:07 +000062\subsection{Using the cgi module}
63\nodename{Using the cgi module}
64
Fred Drake6ef871c1998-03-12 06:52:05 +000065Begin by writing \samp{import cgi}. Do not use \samp{from cgi import
66*} --- the module defines all sorts of names for its own use or for
67backward compatibility that you don't want in your namespace.
Guido van Rossuma29cc971996-07-30 18:22:07 +000068
Fred Drake6ef871c1998-03-12 06:52:05 +000069It's best to use the \class{FieldStorage} class. The other classes
70defined in this module are provided mostly for backward compatibility.
71Instantiate it exactly once, without arguments. This reads the form
72contents from standard input or the environment (depending on the
73value of various environment variables set according to the CGI
74standard). Since it may consume standard input, it should be
75instantiated only once.
Guido van Rossuma29cc971996-07-30 18:22:07 +000076
Moshe Zadkaa1a4b592000-08-25 21:47:56 +000077The \class{FieldStorage} instance can be indexed like a Python
78dictionary, and also supports the standard dictionary methods
Fred Drake84e58ab2001-08-11 03:28:41 +000079\method{has_key()} and \method{keys()}. The built-in \function{len()}
80is also supported. Form fields containing empty strings are ignored
Moshe Zadkaa1a4b592000-08-25 21:47:56 +000081and do not appear in the dictionary; to keep such values, provide
Fred Drake84e58ab2001-08-11 03:28:41 +000082a true value for the the optional \var{keep_blank_values} keyword
83parameter when creating the \class{FieldStorage} instance.
Moshe Zadkaa1a4b592000-08-25 21:47:56 +000084
85For instance, the following code (which assumes that the
Fred Drake84e58ab2001-08-11 03:28:41 +000086\mailheader{Content-Type} header and blank line have already been
87printed) checks that the fields \code{name} and \code{addr} are both
88set to a non-empty string:
Guido van Rossum470be141995-03-17 16:07:09 +000089
Fred Drake19479911998-02-13 06:58:54 +000090\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +000091form = cgi.FieldStorage()
Fred Drake9f9bd6a2001-06-29 14:59:01 +000092if not (form.has_key("name") and form.has_key("addr")):
Guido van Rossume47da0a1997-07-17 16:34:52 +000093 print "<H1>Error</H1>"
94 print "Please fill in the name and addr fields."
95 return
Moshe Zadkaa1a4b592000-08-25 21:47:56 +000096print "<p>name:", form["name"].value
97print "<p>addr:", form["addr"].value
Guido van Rossume47da0a1997-07-17 16:34:52 +000098...further form processing here...
Fred Drake19479911998-02-13 06:58:54 +000099\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +0000100
101Here the fields, accessed through \samp{form[\var{key}]}, are
102themselves instances of \class{FieldStorage} (or
103\class{MiniFieldStorage}, depending on the form encoding).
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000104The \member{value} attribute of the instance yields the string value
Fred Drake84e58ab2001-08-11 03:28:41 +0000105of the field. The \method{getvalue()} method returns this string value
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000106directly; it also accepts an optional second argument as a default to
107return if the requested key is not present.
Guido van Rossum470be141995-03-17 16:07:09 +0000108
Guido van Rossuma29cc971996-07-30 18:22:07 +0000109If the submitted form data contains more than one field with the same
Fred Drake6ef871c1998-03-12 06:52:05 +0000110name, the object retrieved by \samp{form[\var{key}]} is not a
111\class{FieldStorage} or \class{MiniFieldStorage}
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000112instance but a list of such instances. Similarly, in this situation,
113\samp{form.getvalue(\var{key})} would return a list of strings.
114If you expect this possibility
Fred Drake84e58ab2001-08-11 03:28:41 +0000115(when your HTML form contains multiple fields with the same name), use
116the \function{type()} built-in function to determine whether you
117have a single instance or a list of instances. For example, this
118code concatenates any number of username fields, separated by
Fred Drake6ef871c1998-03-12 06:52:05 +0000119commas:
Guido van Rossum470be141995-03-17 16:07:09 +0000120
Fred Drake19479911998-02-13 06:58:54 +0000121\begin{verbatim}
Fred Drake2732cb42001-09-11 16:27:03 +0000122from types import ListType
Fred Drake84e58ab2001-08-11 03:28:41 +0000123
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000124value = form.getvalue("username", "")
Fred Drake84e58ab2001-08-11 03:28:41 +0000125if isinstance(value, ListType):
Guido van Rossume47da0a1997-07-17 16:34:52 +0000126 # Multiple username fields specified
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000127 usernames = ",".join(value)
Guido van Rossume47da0a1997-07-17 16:34:52 +0000128else:
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000129 # Single or no username field specified
130 usernames = value
Fred Drake19479911998-02-13 06:58:54 +0000131\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +0000132
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000133If a field represents an uploaded file, accessing the value via the
134\member{value} attribute or the \function{getvalue()} method reads the
Fred Drake6ef871c1998-03-12 06:52:05 +0000135entire file in memory as a string. This may not be what you want.
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000136You can test for an uploaded file by testing either the \member{filename}
137attribute or the \member{file} attribute. You can then read the data at
138leisure from the \member{file} attribute:
Guido van Rossuma29cc971996-07-30 18:22:07 +0000139
Fred Drake19479911998-02-13 06:58:54 +0000140\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +0000141fileitem = form["userfile"]
142if fileitem.file:
143 # It's an uploaded file; count lines
144 linecount = 0
145 while 1:
146 line = fileitem.file.readline()
147 if not line: break
148 linecount = linecount + 1
Fred Drake19479911998-02-13 06:58:54 +0000149\end{verbatim}
Guido van Rossuma29cc971996-07-30 18:22:07 +0000150
Fred Drake6ef871c1998-03-12 06:52:05 +0000151The file upload draft standard entertains the possibility of uploading
152multiple files from one field (using a recursive
153\mimetype{multipart/*} encoding). When this occurs, the item will be
154a dictionary-like \class{FieldStorage} item. This can be determined
155by testing its \member{type} attribute, which should be
156\mimetype{multipart/form-data} (or perhaps another MIME type matching
Fred Drake7eca8e51999-01-18 15:46:02 +0000157\mimetype{multipart/*}). In this case, it can be iterated over
Fred Drake6ef871c1998-03-12 06:52:05 +0000158recursively just like the top-level form object.
159
160When a form is submitted in the ``old'' format (as the query string or
161as a single data part of type
162\mimetype{application/x-www-form-urlencoded}), the items will actually
163be instances of the class \class{MiniFieldStorage}. In this case, the
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000164\member{list}, \member{file}, and \member{filename} attributes are
165always \code{None}.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000166
167
Fred Drake2732cb42001-09-11 16:27:03 +0000168\subsection{Higher Level Interface}
169
170\versionadded{2.2} % XXX: Is this true ?
171
172The previous section explains how to read CGI form data using the
173\class{FieldStorage} class. This section describes a higher level
174interface which was added to this class to allow one to do it in a
175more readable and intuitive way. The interface doesn't make the
176techniques described in previous sections obsolete --- they are still
177useful to process file uploads efficiently, for example.
178
179The interface consists of two simple methods. Using the methods
180you can process form data in a generic way, without the need to worry
181whether only one or more values were posted under one name.
182
183In the previous section, you learned to write following code anytime
184you expected a user to post more than one value under one name:
185
186\begin{verbatim}
187from types import ListType
188
189item = form.getvalue("item")
190if isinstance(item, ListType):
191 # The user is requesting more than one item.
192else:
193 # The user is requesting only one item.
194\end{verbatim}
195
196This situation is common for example when a form contains a group of
197multiple checkboxes with the same name:
198
199\begin{verbatim}
200<input type="checkbox" name="item" value="1" />
201<input type="checkbox" name="item" value="2" />
202\end{verbatim}
203
204In most situations, however, there's only one form control with a
205particular name in a form and then you expect and need only one value
206associated with this name. So you write a script containing for
207example this code:
208
209\begin{verbatim}
210user = form.getvalue("user").toupper()
211\end{verbatim}
212
213The problem with the code is that you should never expect that a
214client will provide valid input to your scripts. For example, if a
215curious user appends another \samp{user=foo} pair to the query string,
216then the script would crash, because in this situation the
217\code{getvalue("user")} method call returns a list instead of a
218string. Calling the \method{toupper()} method on a list is not valid
219(since lists do not have a method of this name) and results in an
220\exception{AttributeError} exception.
221
222Therefore, the appropriate way to read form data values was to always
223use the code which checks whether the obtained value is a single value
224or a list of values. That's annoying and leads to less readable
225scripts.
226
227A more convenient approach is to use the methods \method{getfirst()}
228and \method{getlist()} provided by this higher level interface.
229
230\begin{methoddesc}[FieldStorage]{getfirst}{name\optional{, default}}
231 Thin method always returns only one value associated with form field
232 \var{name}. The method returns only the first value in case that
233 more values were posted under such name. Please note that the order
234 in which the values are received may vary from browser to browser
235 and should not be counted on. If no such form field or value exists
236 then the method returns the value specified by the optional
237 parameter \var{default}. This parameter defaults to \code{None} if
238 not specified.
239\end{methoddesc}
240
241\begin{methoddesc}[FieldStorage]{getlist}{name}
242 This method always returns a list of values associated with form
243 field \var{name}. The method returns an empty list if no such form
244 field or value exists for \var{name}. It returns a list consisting
245 of one item if only one such value exists.
246\end{methoddesc}
247
248Using these methods you can write nice compact code:
249
250\begin{verbatim}
251import cgi
252form = cgi.FieldStorage()
253user = form.getfirst("user").toupper() # This way it's safe.
254for item in form.getlist("item"):
255 do_something(item)
256\end{verbatim}
257
258
Guido van Rossuma29cc971996-07-30 18:22:07 +0000259\subsection{Old classes}
260
Fred Drake6ef871c1998-03-12 06:52:05 +0000261These classes, present in earlier versions of the \module{cgi} module,
262are still supported for backward compatibility. New applications
263should use the \class{FieldStorage} class.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000264
Fred Drake6ef871c1998-03-12 06:52:05 +0000265\class{SvFormContentDict} stores single value form content as
266dictionary; it assumes each field name occurs in the form only once.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000267
Fred Drake6ef871c1998-03-12 06:52:05 +0000268\class{FormContentDict} stores multiple value form content as a
269dictionary (the form items are lists of values). Useful if your form
270contains multiple fields with the same name.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000271
Fred Drake6ef871c1998-03-12 06:52:05 +0000272Other classes (\class{FormContent}, \class{InterpFormContentDict}) are
273present for backwards compatibility with really old applications only.
274If you still use these and would be inconvenienced when they
275disappeared from a next version of this module, drop me a note.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000276
277
278\subsection{Functions}
Fred Drake4b3f0311996-12-13 22:04:31 +0000279\nodename{Functions in cgi module}
Guido van Rossuma29cc971996-07-30 18:22:07 +0000280
281These are useful if you want more control, or if you want to employ
282some of the algorithms implemented in this module in other
283circumstances.
284
Fred Drake2732cb42001-09-11 16:27:03 +0000285\begin{funcdesc}{parse}{fp\optional{, keep_blank_values\optional{,
286 strict_parsing}}}
287 Parse a query in the environment or from a file (the file defaults
288 to \code{sys.stdin}). The \var{keep_blank_values} and
289 \var{strict_parsing} parameters are passed to \function{parse_qs()}
290 unchanged.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000291\end{funcdesc}
292
Fred Drake2732cb42001-09-11 16:27:03 +0000293\begin{funcdesc}{parse_qs}{qs\optional{, keep_blank_values\optional{,
294 strict_parsing}}}
Fred Drake6ef871c1998-03-12 06:52:05 +0000295Parse a query string given as a string argument (data of type
Guido van Rossum66ab4e81999-06-10 03:11:41 +0000296\mimetype{application/x-www-form-urlencoded}). Data are
297returned as a dictionary. The dictionary keys are the unique query
Fred Drake38e5d272000-04-03 20:13:55 +0000298variable names and the values are lists of values for each name.
Guido van Rossum66ab4e81999-06-10 03:11:41 +0000299
300The optional argument \var{keep_blank_values} is
301a flag indicating whether blank values in
302URL encoded queries should be treated as blank strings.
303A true value indicates that blanks should be retained as
304blank strings. The default false value indicates that
305blank values are to be ignored and treated as if they were
306not included.
307
308The optional argument \var{strict_parsing} is a flag indicating what
309to do with parsing errors. If false (the default), errors
310are silently ignored. If true, errors raise a ValueError
311exception.
312\end{funcdesc}
313
Fred Drake2732cb42001-09-11 16:27:03 +0000314\begin{funcdesc}{parse_qsl}{qs\optional{, keep_blank_values\optional{,
315 strict_parsing}}}
Guido van Rossum66ab4e81999-06-10 03:11:41 +0000316Parse a query string given as a string argument (data of type
317\mimetype{application/x-www-form-urlencoded}). Data are
318returned as a list of name, value pairs.
319
320The optional argument \var{keep_blank_values} is
321a flag indicating whether blank values in
322URL encoded queries should be treated as blank strings.
323A true value indicates that blanks should be retained as
324blank strings. The default false value indicates that
325blank values are to be ignored and treated as if they were
326not included.
327
328The optional argument \var{strict_parsing} is a flag indicating what
329to do with parsing errors. If false (the default), errors
330are silently ignored. If true, errors raise a ValueError
331exception.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000332\end{funcdesc}
333
Fred Drakecce10901998-03-17 06:33:25 +0000334\begin{funcdesc}{parse_multipart}{fp, pdict}
Fred Drake6ef871c1998-03-12 06:52:05 +0000335Parse input of type \mimetype{multipart/form-data} (for
336file uploads). Arguments are \var{fp} for the input file and
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000337\var{pdict} for a dictionary containing other parameters in
Fred Drake84e58ab2001-08-11 03:28:41 +0000338the \mailheader{Content-Type} header.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000339
Fred Drake6ef871c1998-03-12 06:52:05 +0000340Returns a dictionary just like \function{parse_qs()} keys are the
341field names, each value is a list of values for that field. This is
342easy to use but not much good if you are expecting megabytes to be
343uploaded --- in that case, use the \class{FieldStorage} class instead
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000344which is much more flexible.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000345
Fred Drake6ef871c1998-03-12 06:52:05 +0000346Note that this does not parse nested multipart parts --- use
347\class{FieldStorage} for that.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000348\end{funcdesc}
349
Guido van Rossum81e479a1997-08-25 18:28:03 +0000350\begin{funcdesc}{parse_header}{string}
Fred Drake84e58ab2001-08-11 03:28:41 +0000351Parse a MIME header (such as \mailheader{Content-Type}) into a main
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000352value and a dictionary of parameters.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000353\end{funcdesc}
354
Guido van Rossum81e479a1997-08-25 18:28:03 +0000355\begin{funcdesc}{test}{}
Fred Drake6ef871c1998-03-12 06:52:05 +0000356Robust test CGI script, usable as main program.
357Writes minimal HTTP headers and formats all information provided to
358the script in HTML form.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000359\end{funcdesc}
360
Guido van Rossum81e479a1997-08-25 18:28:03 +0000361\begin{funcdesc}{print_environ}{}
Fred Drake6ef871c1998-03-12 06:52:05 +0000362Format the shell environment in HTML.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000363\end{funcdesc}
364
Guido van Rossum81e479a1997-08-25 18:28:03 +0000365\begin{funcdesc}{print_form}{form}
Fred Drake6ef871c1998-03-12 06:52:05 +0000366Format a form in HTML.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000367\end{funcdesc}
368
Guido van Rossum81e479a1997-08-25 18:28:03 +0000369\begin{funcdesc}{print_directory}{}
Fred Drake6ef871c1998-03-12 06:52:05 +0000370Format the current directory in HTML.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000371\end{funcdesc}
372
Guido van Rossum81e479a1997-08-25 18:28:03 +0000373\begin{funcdesc}{print_environ_usage}{}
Fred Drake6ef871c1998-03-12 06:52:05 +0000374Print a list of useful (used by CGI) environment variables in
Guido van Rossuma29cc971996-07-30 18:22:07 +0000375HTML.
376\end{funcdesc}
377
Fred Drakecce10901998-03-17 06:33:25 +0000378\begin{funcdesc}{escape}{s\optional{, quote}}
Fred Drake6ef871c1998-03-12 06:52:05 +0000379Convert the characters
380\character{\&}, \character{<} and \character{>} in string \var{s} to
381HTML-safe sequences. Use this if you need to display text that might
382contain such characters in HTML. If the optional flag \var{quote} is
Fred Drake84e58ab2001-08-11 03:28:41 +0000383true, the double-quote character (\character{"}) is also translated;
Fred Drake91f2f262001-07-06 19:28:48 +0000384this helps for inclusion in an HTML attribute value, as in \code{<A
Fred Drake84e58ab2001-08-11 03:28:41 +0000385HREF="...">}. If the value to be qouted might include single- or
386double-quote characters, or both, consider using the
387\function{quoteattr()} function in the \refmodule{xml.sax.saxutils}
388module instead.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000389\end{funcdesc}
390
391
392\subsection{Caring about security}
393
Fred Drake91f2f262001-07-06 19:28:48 +0000394There's one important rule: if you invoke an external program (via the
395\function{os.system()} or \function{os.popen()} functions. or others
396with similar functionality), make very sure you don't pass arbitrary
397strings received from the client to the shell. This is a well-known
Fred Drake8ee679f2001-07-14 02:50:55 +0000398security hole whereby clever hackers anywhere on the Web can exploit a
Fred Drake91f2f262001-07-06 19:28:48 +0000399gullible CGI script to invoke arbitrary shell commands. Even parts of
400the URL or field names cannot be trusted, since the request doesn't
401have to come from your form!
Guido van Rossuma29cc971996-07-30 18:22:07 +0000402
403To be on the safe side, if you must pass a string gotten from a form
404to a shell command, you should make sure the string contains only
405alphanumeric characters, dashes, underscores, and periods.
406
407
Fred Drakec37b65e2001-11-28 07:26:15 +0000408\subsection{Installing your CGI script on a \UNIX\ system}
Guido van Rossuma29cc971996-07-30 18:22:07 +0000409
410Read the documentation for your HTTP server and check with your local
411system administrator to find the directory where CGI scripts should be
Fred Drakea2e268a1997-12-09 03:28:42 +0000412installed; usually this is in a directory \file{cgi-bin} in the server tree.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000413
414Make sure that your script is readable and executable by ``others''; the
Fred Drake6ef871c1998-03-12 06:52:05 +0000415\UNIX{} file mode should be \code{0755} octal (use \samp{chmod 0755
Fred Drake7eca8e51999-01-18 15:46:02 +0000416\var{filename}}). Make sure that the first line of the script contains
Fred Drake6ef871c1998-03-12 06:52:05 +0000417\code{\#!} starting in column 1 followed by the pathname of the Python
418interpreter, for instance:
Guido van Rossuma29cc971996-07-30 18:22:07 +0000419
Fred Drake19479911998-02-13 06:58:54 +0000420\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +0000421#!/usr/local/bin/python
Fred Drake19479911998-02-13 06:58:54 +0000422\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +0000423
Guido van Rossuma29cc971996-07-30 18:22:07 +0000424Make sure the Python interpreter exists and is executable by ``others''.
425
426Make sure that any files your script needs to read or write are
Fred Drake6ef871c1998-03-12 06:52:05 +0000427readable or writable, respectively, by ``others'' --- their mode
428should be \code{0644} for readable and \code{0666} for writable. This
429is because, for security reasons, the HTTP server executes your script
430as user ``nobody'', without any special privileges. It can only read
431(write, execute) files that everybody can read (write, execute). The
432current directory at execution time is also different (it is usually
433the server's cgi-bin directory) and the set of environment variables
Fred Drake8ee679f2001-07-14 02:50:55 +0000434is also different from what you get when you log in. In particular, don't
Fred Drake6ef871c1998-03-12 06:52:05 +0000435count on the shell's search path for executables (\envvar{PATH}) or
436the Python module search path (\envvar{PYTHONPATH}) to be set to
437anything interesting.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000438
439If you need to load modules from a directory which is not on Python's
440default module search path, you can change the path in your script,
Fred Drake91f2f262001-07-06 19:28:48 +0000441before importing other modules. For example:
Guido van Rossuma29cc971996-07-30 18:22:07 +0000442
Fred Drake19479911998-02-13 06:58:54 +0000443\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +0000444import sys
445sys.path.insert(0, "/usr/home/joe/lib/python")
446sys.path.insert(0, "/usr/local/lib/python")
Fred Drake19479911998-02-13 06:58:54 +0000447\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +0000448
Guido van Rossuma29cc971996-07-30 18:22:07 +0000449(This way, the directory inserted last will be searched first!)
450
Fred Drakeefc1e0f1998-01-13 19:00:33 +0000451Instructions for non-\UNIX{} systems will vary; check your HTTP server's
Guido van Rossuma29cc971996-07-30 18:22:07 +0000452documentation (it will usually have a section on CGI scripts).
453
454
455\subsection{Testing your CGI script}
456
457Unfortunately, a CGI script will generally not run when you try it
458from the command line, and a script that works perfectly from the
459command line may fail mysteriously when run from the server. There's
460one reason why you should still test your script from the command
Fred Drake6a79be81998-04-03 03:47:03 +0000461line: if it contains a syntax error, the Python interpreter won't
Guido van Rossuma29cc971996-07-30 18:22:07 +0000462execute it at all, and the HTTP server will most likely send a cryptic
463error to the client.
464
465Assuming your script has no syntax errors, yet it does not work, you
Fred Drake6ef871c1998-03-12 06:52:05 +0000466have no choice but to read the next section.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000467
468
469\subsection{Debugging CGI scripts}
470
Fred Drake6ef871c1998-03-12 06:52:05 +0000471First of all, check for trivial installation errors --- reading the
Guido van Rossuma29cc971996-07-30 18:22:07 +0000472section above on installing your CGI script carefully can save you a
473lot of time. If you wonder whether you have understood the
474installation procedure correctly, try installing a copy of this module
Fred Drakea2e268a1997-12-09 03:28:42 +0000475file (\file{cgi.py}) as a CGI script. When invoked as a script, the file
Guido van Rossuma29cc971996-07-30 18:22:07 +0000476will dump its environment and the contents of the form in HTML form.
477Give it the right mode etc, and send it a request. If it's installed
Fred Drakea2e268a1997-12-09 03:28:42 +0000478in the standard \file{cgi-bin} directory, it should be possible to send it a
Guido van Rossuma29cc971996-07-30 18:22:07 +0000479request by entering a URL into your browser of the form:
480
Fred Drake19479911998-02-13 06:58:54 +0000481\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +0000482http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home
Fred Drake19479911998-02-13 06:58:54 +0000483\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +0000484
Guido van Rossuma29cc971996-07-30 18:22:07 +0000485If this gives an error of type 404, the server cannot find the script
486-- perhaps you need to install it in a different directory. If it
Fred Drake91f2f262001-07-06 19:28:48 +0000487gives another error, there's an installation problem that
Guido van Rossuma29cc971996-07-30 18:22:07 +0000488you should fix before trying to go any further. If you get a nicely
489formatted listing of the environment and form content (in this
490example, the fields should be listed as ``addr'' with value ``At Home''
Fred Drakea2e268a1997-12-09 03:28:42 +0000491and ``name'' with value ``Joe Blow''), the \file{cgi.py} script has been
Guido van Rossuma29cc971996-07-30 18:22:07 +0000492installed correctly. If you follow the same procedure for your own
493script, you should now be able to debug it.
494
Fred Drake6ef871c1998-03-12 06:52:05 +0000495The next step could be to call the \module{cgi} module's
496\function{test()} function from your script: replace its main code
497with the single statement
Guido van Rossuma29cc971996-07-30 18:22:07 +0000498
Fred Drake19479911998-02-13 06:58:54 +0000499\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +0000500cgi.test()
Fred Drake19479911998-02-13 06:58:54 +0000501\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +0000502
Guido van Rossuma29cc971996-07-30 18:22:07 +0000503This should produce the same results as those gotten from installing
Fred Drakea2e268a1997-12-09 03:28:42 +0000504the \file{cgi.py} file itself.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000505
Fred Drake91f2f262001-07-06 19:28:48 +0000506When an ordinary Python script raises an unhandled exception (for
507whatever reason: of a typo in a module name, a file that can't be
508opened, etc.), the Python interpreter prints a nice traceback and
509exits. While the Python interpreter will still do this when your CGI
510script raises an exception, most likely the traceback will end up in
511one of the HTTP server's log file, or be discarded altogether.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000512
513Fortunately, once you have managed to get your script to execute
Fred Drake6ef871c1998-03-12 06:52:05 +0000514\emph{some} code, it is easy to catch exceptions and cause a traceback
515to be printed. The \function{test()} function below in this module is
516an example. Here are the rules:
Guido van Rossuma29cc971996-07-30 18:22:07 +0000517
518\begin{enumerate}
Fred Drake6ef871c1998-03-12 06:52:05 +0000519\item Import the traceback module before entering the \keyword{try}
520 ... \keyword{except} statement
521
522\item Assign \code{sys.stderr} to be \code{sys.stdout}
523
524\item Make sure you finish printing the headers and the blank line
525 early
526
527\item Wrap all remaining code in a \keyword{try} ... \keyword{except}
528 statement
529
530\item In the except clause, call \function{traceback.print_exc()}
Guido van Rossuma29cc971996-07-30 18:22:07 +0000531\end{enumerate}
532
533For example:
534
Fred Drake19479911998-02-13 06:58:54 +0000535\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +0000536import sys
537import traceback
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000538print "Content-Type: text/html"
Guido van Rossume47da0a1997-07-17 16:34:52 +0000539print
540sys.stderr = sys.stdout
541try:
542 ...your code here...
543except:
544 print "\n\n<PRE>"
545 traceback.print_exc()
Fred Drake19479911998-02-13 06:58:54 +0000546\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +0000547
548Notes: The assignment to \code{sys.stderr} is needed because the
549traceback prints to \code{sys.stderr}.
Guido van Rossum9d62e801997-11-25 00:35:44 +0000550The \code{print "{\e}n{\e}n<PRE>"} statement is necessary to
Guido van Rossuma29cc971996-07-30 18:22:07 +0000551disable the word wrapping in HTML.
552
553If you suspect that there may be a problem in importing the traceback
554module, you can use an even more robust approach (which only uses
555built-in modules):
556
Fred Drake19479911998-02-13 06:58:54 +0000557\begin{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +0000558import sys
559sys.stderr = sys.stdout
Moshe Zadkaa1a4b592000-08-25 21:47:56 +0000560print "Content-Type: text/plain"
Guido van Rossume47da0a1997-07-17 16:34:52 +0000561print
562...your code here...
Fred Drake19479911998-02-13 06:58:54 +0000563\end{verbatim}
Fred Drake6ef871c1998-03-12 06:52:05 +0000564
Guido van Rossuma29cc971996-07-30 18:22:07 +0000565This relies on the Python interpreter to print the traceback. The
566content type of the output is set to plain text, which disables all
567HTML processing. If your script works, the raw HTML will be displayed
568by your client. If it raises an exception, most likely after the
569first two lines have been printed, a traceback will be displayed.
570Because no HTML interpretation is going on, the traceback will
571readable.
572
573
574\subsection{Common problems and solutions}
Guido van Rossum470be141995-03-17 16:07:09 +0000575
576\begin{itemize}
Guido van Rossuma29cc971996-07-30 18:22:07 +0000577\item Most HTTP servers buffer the output from CGI scripts until the
578script is completed. This means that it is not possible to display a
579progress report on the client's display while the script is running.
580
581\item Check the installation instructions above.
582
Fred Drake6ef871c1998-03-12 06:52:05 +0000583\item Check the HTTP server's log files. (\samp{tail -f logfile} in a
584separate window may be useful!)
Guido van Rossuma29cc971996-07-30 18:22:07 +0000585
586\item Always check a script for syntax errors first, by doing something
Fred Drake6ef871c1998-03-12 06:52:05 +0000587like \samp{python script.py}.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000588
589\item When using any of the debugging techniques, don't forget to add
Fred Drake6ef871c1998-03-12 06:52:05 +0000590\samp{import sys} to the top of the script.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000591
592\item When invoking external programs, make sure they can be found.
Fred Drake6ef871c1998-03-12 06:52:05 +0000593Usually, this means using absolute path names --- \envvar{PATH} is
594usually not set to a very useful value in a CGI script.
Guido van Rossuma29cc971996-07-30 18:22:07 +0000595
596\item When reading or writing external files, make sure they can be read
597or written by every user on the system.
598
599\item Don't try to give a CGI script a set-uid mode. This doesn't work on
600most systems, and is a security liability as well.
Guido van Rossum470be141995-03-17 16:07:09 +0000601\end{itemize}
602