2011-12-06 24 views
0

我正在Python中使用HTTPServer和BaseHTTPRequestHandler創建一個簡單的Web服務器。以下是我迄今爲止:將值發送到BaseHTTPRequestHandler

from handler import Handler #my BaseHTTPRequestHandler 

def run(self): 
    httpd = HTTPServer(('', 7214), Handler) 
    try: 
     httpd.serve_forever() 
    except KeyboardInterrupt: 
     pass 
    httpd.server_close() 

我想設置爲處理程序服務從文件的基本路徑,但我不知道該怎麼做,因爲它尚未實例化?我有一種感覺,這很容易/明顯,但我想不出如何去做。我知道我可以在Handler類中做到這一點,但如果可能的話,我想從這裏做,因爲我的所有配置都在這裏閱讀。

+0

你想從一個目錄提供文件嗎? SimpleHTTPServer對你來說已經默認了... –

+0

我想我可以使用'SimpleHTTPServer' /'SimpleHTTPRequestHandler',但我認爲我的問題對這個類仍然有效。我如何告訴'SimpleHTTPRequestHandler'使用特定的目錄而不僅僅是當前目錄。我想我沒有那麼清楚。 – NeilMonday

+0

如果需要,'python -m SimpleHTTPServer'將從CWD提供文件。只是想讓你的工作變得簡單。 :) –

回答

1

既然沒有人願意回答你的問題......

只需更換與評論「yourpath」的代碼部分。

import os 
import posixpath 
import socket 
import urllib 
from BaseHTTPServer import HTTPServer 
from SimpleHTTPServer import SimpleHTTPRequestHandler 


class MyFileHandler(SimpleHTTPRequestHandler): 
    def translate_path(self, path): 
     """Translate a /-separated PATH to the local filename syntax. 

     Components that mean special things to the local file system 
     (e.g. drive or directory names) are ignored. (XXX They should 
     probably be diagnosed.) 

     """ 
     # abandon query parameters 
     path = path.split('?',1)[0] 
     path = path.split('#',1)[0] 
     path = posixpath.normpath(urllib.unquote(path)) 
     words = path.split('/') 
     words = filter(None, words) 
     path = '/' # yourpath 
     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 run(): 
    try: 
     httpd = HTTPServer(('', 7214), MyFileHandler) 
     httpd.serve_forever() 
    except KeyboardInterrupt: 
     pass 
    except socket.error as e: 
     print e 
    else: 
     httpd.server_close() 
+0

不錯!謝啦。今晚會試試這個。 – NeilMonday