PytonでWebサーバ

PythonCGIサーバが動けばサクっと実行するだけでWebサービスのデモが出来て良いかも!
と思って調べてみた

しかし、この方法でCGIのテストをやろうとするといくつか問題があった。

  • POSTでCGIを駆動しない場合(単に何かを取りにいった場合)501で失敗する
  • CGIの拡張子が.py,.pywのみ

POSTにしているのはGETだとAJAXした時にIEがキャッシュするからです。
まぁどちらの問題もCGIJavaScriptを書き換えれば直るんですが、なんかうれしくない。
PythonのWebサーバを書き換えてこの問題を解決しよう ということでやってみました

import os, BaseHTTPServer, CGIHTTPServer,SimpleHTTPServer

class PyHTTPRequestHandler(CGIHTTPServer.    CGIHTTPRequestHandler):
    def do_POST(self):
        if self.is_cgi():
            CGIHTTPServer.CGIHTTPRequestHandler.do_POST(self)
        else:  #やっぱりGETってことでw
            self.do_GET();
    def is_python(self,path): #cgiってあったらpythonだと思いな!
        head,tail=os.path.splitext(path)
        return tail.lower() in (".py", ".pyw",".cgi") #warning!
CGIHTTPServer.CGIHTTPRequestHandler.cgi_directories = ['/cgi-bin']
BaseHTTPServer.HTTPServer(
    ('127.0.0.1', 8000),
    PyHTTPRequestHandler
    ).serve_forever()

やってることはただのオーバーライドなので知ってしまえばなんとも無いです。