Content-Dispositionを除去するプロキシスクリプト

Google ChromeだとIEのように一時フォルダにファイルを保存して開くということができないので、ダウンロード専用のファイルを見るのがちょっと面倒。ということで、HTTPヘッダから、Content-Dispositionを除去し、Content-Typeをapplication/octet-streamから適当なものに差し替えるプロキシを書いた。セキュリティとか著作権法とかが怖いので、設置したスクリプトを公開するのはやめておこう……。

#!/usr/bin/python
import cgi, urllib, sys

page = """<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Content-Disposition Remover</title>
  </head>
  <body style="text-align:center">
    <h1>Content-Disposition Remover</h1>
    <form method="get">
      <input type="text" name="url" style="font-size:x-large">
      <input type="submit" style="font-size:x-large">
    </form>
  </body>
</html>"""

mime = {
    "txt":  "text/plain",
    "htm":  "text/html",
    "html": "text/html",
    "xml":  "text/xml",
    "js":   "text/javascript",
    "vbs":  "text/vbscript",
    "css":  "text/css",
    "gif":  "image/gif",
    "jpg":  "image/jpeg",
    "jpeg": "image/jpeg",
    "png":  "image/png",
    "cgi":  "application/x-httpd-cgi",
    "doc":  "application/msword",
    "pdf":  "application/pdf",
}

def main():
    url = cgi.FieldStorage().getfirst("url","")
    if url=="":
        print 'Content-Type: text/html'
        print
        print page
    else:
        try:
            d = urllib.urlopen(url)

            info = d.info()
            if "content-type" in info and info["content-type"]=="application/octet-stream":
                info["content-type"] = "text/plain"
                if "content-disposition" in info:
                    ex = info["content-disposition"].split(".")[-1].lower() # :)
                    if ex in mime:
                        info["content-type"] = mime[ex]
            if "content-disposition" in info:
                del(info["content-disposition"])
            for i in d.info():
                print "%s: %s"%(i,d.info()[i])

            print
            while True:
                b = d.read()
                if b=="": break
                sys.stdout.write(b)

        except Exception, e:
            print "Content-Type: text/html"
            print
            print "Error"
            print e.message

main()