/services/remime.cgi
#!/usr/bin/env python
"""
remime - A CGI Tool to Allow MIME Type Override
License: GPL 2; share and enjoy!
Author: Sean B. Palmer, inamidst.com
Implemented requests:
00:31:02 <kpreid> sbp: why not propagate the request's UA?
- http://swhack.com/logs/2004-08-06#T00-31-02
---
<title>MIME Type Fixing Service</title>
<link rel="stylesheet" type="text/css" href="/trove/pwyky.css" />
<h1>MIME Type Fixing Service</h1>
<form action="./remime" method="GET">
<div>URI <input type="text" size="35" name="uri" /></div>
<div>MIME Type: <input type="text" size="25" name="mime" /></div>
<div><input type="submit" /></div>
</form>
<p>This form allows you to fix the MIME type of documents that are
being incorrectly served. View the <a href="/inside/services/remime">Python
source code</a>.</p>
<address>
<a href="http://inamidst.com/sbp/">Sean B. Palmer</a>
</address>
"""
print "Content-Type: text/html"
print
print "<title>HTTP Remime</title>"
print "<h1>HTTP Remime</h1>"
print "<p>This service is presently offline.</p>"
import sys
sys.exit()
import cgitb; cgitb.enable()
import sys, os, urllib
sys.path.append('../misc')
from cgiutil import method, form
class Grab(urllib.URLopener):
def __init__(self, *args):
version = os.environ.get('HTTP_USER_AGENT')
self.version = version or 'Mozilla/5.0 (remime)'
urllib.URLopener.__init__(self, *args)
def http_error_default(self, url, fp, errcode, errmsg, headers):
return urllib.addinfourl(fp, [headers, errcode], "http:" + url)
urllib._urlopener = Grab()
def serve(status, headers, s):
sys.stdout.write("Status: %s\r\n" % status)
sys.stdout.write(headers + "\r\n")
sys.stdout.write(s)
def remime(uri, mime):
u = urllib.urlopen(uri)
info = u.info()
s = u.read()
u.close()
if not isinstance(info, list):
status, headers = 200, info
else: headers, status = tuple(info)
headers['Content-Type'] = mime
headers = str(headers)
serve(status, headers, s)
def homepage():
headers = 'Content-Type: text/html; charset=utf-8\r\n'
i = __doc__.find('---')
serve(200, headers, __doc__[i+3:])
def main():
if form.has_key('uri') and form.has_key('mime'):
remime(form('uri'), form('mime'))
elif method == 'GET': homepage()
else: serve(501, "<p>Only GET is supported.</p>\n")
if __name__=="__main__":
main()