リダイレクトの生成方法がわかりません...基本的なSimpleHTTPServerを実装しようとしましたが、クエリ文字列パラメータを使用するとリダイレクトが発生しません。
self.path.split("/")
のような処理を行い、要求を処理する前にパスを処理しますか? このコードは何をしたいと思うん:
import SocketServer
import SimpleHTTPServer
import os
class CustomHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def folder(self):
fid = self.uri[-1].split("?id=")[-1].rstrip()
return "FOLDER ID: %s" % fid
def get_static_content(self):
# set default root to cwd
root = os.getcwd()
# look up routes and set root directory accordingly
for pattern, rootdir in ROUTES:
if path.startswith(pattern):
# found match!
path = path[len(pattern):] # consume path up to pattern len
root = rootdir
break
# normalize path and prepend root directory
path = path.split('?',1)[0]
path = path.split('#',1)[0]
path = posixpath.normpath(urllib.unquote(path))
words = path.split('/')
words = filter(None, words)
path = root
for word in words:
drive, word = os.path.splitdrive(word)
head, word = os.path.split(word)
if word in (os.curdir, os.pardir):
continue
path = os.path.join(path, word)
return path
def do_GET(self):
path = self.path
self.uri = path.split("/")[1:]
actions = {
"folder": self.folder,
}
resource = self.uri[0]
if not resource:
return self.get_static_content()
action = actions.get(resource)
if action:
print "action from looking up '%s' is:" % resource, action
return self.wfile.write(action())
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
class MyTCPServer(SocketServer.ThreadingTCPServer):
allow_reuse_address = True
httpd = MyTCPServer(('localhost', 8080), CustomHandler)
httpd.allow_reuse_address = True
print "serving at port", 8080
httpd.serve_forever()
はそれを試してみてください:
HTTP GET /folder/?id=500x
- >"FOLDER ID: 500x"
をEDIT:
オーケー、あなたが使用していないので、もしSimpleHTTPServerの前に、基本的に基本リクエストハンドラを実装し、do_GET()、do_PUT()、do_POST()などを実装します。
私は通常、リクエスト文字列(reを使って)、パターンマッチを解析し、リクエストハンドラが見つかるかどうかを確認し、可能であれば静的コンテンツのリクエストとしてリクエストを処理します。
はあなたが要求がファイル・ストアに一致した場合、その後、あなたの周りのこのパターンマッチングを反転する必要があり、すべての可能な場合は、静的コンテンツを提供し、FIRST見たいといない場合は、その後、ハンドラ:)
SimpleHTTPServerはファイルのみを扱います。要求の中のパラメータを扱うためには別のものを使用します。 –