/services/httphead.cgi

#!/usr/bin/env python
"""
HTTP HEAD Script
Abstract: Sends HTTP HEAD requests to arbitrary Web pages
License: GPL 2; share and enjoy!
Author: Sean B. Palmer, inamidst.com
Date: 2004-06

---

<title>HTTP HEAD Webservice</title>
<link rel="stylesheet" type="text/css" href="/trove/pwyky.css" />
<h1>HTTP HEAD Service</h1>

<form action="./httphead" method="GET">
<p>URI <input type="text" size="35" name="uri" /> 
<input type="submit" /></p>
</form>

<p>View the <a href="/inside/services/httphead">Python 
source code</a>. Nearby services: <a 
href="http://cgi.w3.org/cgi-bin/headers">the W3C's 
HTTP HEAD service</a>.</p>

<address>
<a href="http://inamidst.com/sbp/">Sean B. Palmer</a>
</address>
"""

import cgitb; cgitb.enable()
import sys, os, cgi, urllib

method = os.environ.get('REQUEST_METHOD')
form = cgi.FieldStorage()
form.__call__ = lambda s: form[s].value

def serve(status, body, mime=None): 
   mime = mime or 'text/html'
   sys.stdout.write("Status: %s\r\n" % status)
   sys.stdout.write("Content-Type: %s; charset=utf-8\r\n\r\n" % mime)
   sys.stdout.write(body)
   sys.exit()

def homepage(): 
   i = __doc__.find('---')
   serve(200, __doc__[i+3:])

def head(uri): 
   try: u = urllib.urlopen(uri)
   except Exception, e: 
      serve(500, "<p>Error: %s.</p>" % cgi.escape(str(e)))
   info = u.info()
   u.close()
   serve(200, str(info), "text/plain")
   
def main(): 
   if form.has_key('uri'): head(form('uri'))
   elif method == 'GET': homepage()
   else: serve(501, "<p>Only GET is supported.</p>\n")

if __name__=="__main__": 
   main()