Simple CGI Script in Python

From XPUB & Lens-Based wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The Python documentation is a pretty good place to start: http://docs.python.org/library/cgi.html

Check List

  1. the scripts starts with:
  #!/usr/bin/env python
  #-*- coding:utf-8 -*-
  1. also import and enable cgi traceback
import cgitb;
cgitb.enable()
  1. the filename ends with .cgi
  2. chmod 755 the_file.cgi
  3. print the headers
 print "Content-Type: text/html; charset=utf-8"     # HTML is following
 print                               # blank line, end of headers
  1. the script is here http://pzwart3.wdka.hro.nl/~yourname/cgi-bin/the_file.cgi

Hello world

#!/usr/bin/env python
#-*- coding:utf-8 -*-
print "Content-Type: text/html"     # HTML is following
print                               # blank line, end of headers
print "Hello!"

Show Headers

HTTP headers are simply environment variables. Use the os.environ dictionary to get at them.

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import os

print "Content-type: text/html"
print

# show all headers as an HTML definition list

print "<dl>"
for key in os.environ:
    print "<dt>" + key + "</dt>"
    print "<dd>" + os.environ[key] + "</dd>"
print "</dl>"


"Discriminating" Response based on IP Address

Interesting headers:

  • HTTP_USER_AGENT (string identifying the user's browser, also often includes information about the computer / operating system as well)
  • REMOTE_ADDR (the IP address of the user's machine *or* gateway)
  • REQUEST_METHOD (either "GET" or "POST")
  • QUERY_STRING (the stuff after the '?' in the users's request URL)
  • HTTP_ACCEPT_LANGUAGE (language code set by user's browser)
#!/usr/bin/env python
#-*- coding:utf-8 -*-

import os

print "Content-type: text/html"
print

addr = os.environ['REMOTE_ADDR']
last = addr.split(".")[-1]
agent = os.environ.get("HTTP_USER_AGENT")

if agent == None:
    print "Go away, bot!"

if (last == "188") or (last=="18") or (last=="67"):
    print '<img src="http://www.kuliniewicz.org/hotlink/hotlink.png" />'
else:
    print 'Hello "%s"' % agent