/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()