用 Python 來實作一個 Web Server 吧!

探討「內嵌」以及「腳本化」這兩個主題的技術-版主XO老師(熟悉的目前是 Tcl,討論內容也會環繞在 Tcl 四周,但是本版還是歡迎其他 Scripting 語言以及任何「內嵌」技術的討論。)

版主: b80203, ghost3401, XO, maa

分享到: Facebook

用 Python 來實作一個 Web Server 吧!

文章XO » 週四 2月 02, 2006 6:22 pm

http://fragments.turtlemeat.com/pythonwebserver.php

我把程式稍事整理一下,放在這裡,大夥兒享用吧!為了避免你機器上另有Web Server 佔用 Port 80,我把這個 Web server 開在 8080 埠來服務。還有一些小 bUG 待解決。

代碼: 選擇全部
import string, cgi, time
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):
  def do_GET(self):
    try:
      if self.path.endswith('.html'):
        # watchout: the following code potentially makes every file on
        #           your computer readable by the Internet
        f = open(curdir + sep + self.path)   # self.path has /test.html
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(f.read())
        f.close()
        return       
      if self.path.endswith('.esp'):  #our dynamic content
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write('Hey, today is the ' + str(time.localtime()[7]))
        self.wfile.write(' day in the year ' + str(time.localtime()[0]))
        return
      # Simply return on All other cases
      return
    except IOError:
      self.send_error(404, 'File Not Found: %s' % self.path)

  def do_POST(self):
    global rootnode
    try:
      ctype, pdict = cgi.parse_header(self.headers.getheader('Content-type'))
      if ctype == 'multipart/form-data':
        query = cgi.parse_multipart(self.rfile, pdict)
      self.send_response(302)
      self.end_headers()
      upfilecontent = query.get('upfile')
      print 'filecontent:\n', upfilecontent[0]
      self.wfile.write('<HTML>POST OK.<BR><BR>')
      self.wfile.write(upfilecontent[0])
    except:
      pass
     
def main():
  try:
    server = HTTPServer(("", 8080), MyHandler)
    print 'started httpserver...'
    server.serve_forever()
  except KeyboardInterrupt:
    print '^C received, shutting down server...'
    server.socket.close()
   
if __name__ == '__main__':
  main()
eXtra Old 的是我「不是酒」哦!
제 이름은 오조휘 입니다

臉書裡依舊是 Extra.Old: http://www.facebook.com/extra.old
頭像
XO
資管系教師
 
文章: 5388
註冊時間: 週二 4月 27, 2004 12:20 pm
來自: CQ Inc.

回到 內嵌與腳本化(Embedding & Scripting)

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客