基于BaseHTTPServer的简单存储服务器

服务器代码:

from BaseHTTPServer import BaseHTTPRequestHandler  
from BaseHTTPServer import HTTPServer  
import cgi
import os


class MyHTTPRequestHandler( BaseHTTPRequestHandler ):  

    def do_GET( self ):
        
        pass

  
    def do_POST(self):
        
        form = cgi.FieldStorage(  # cgi.FieldStorage实例效果类似一个字典,包含键-值和len等内置函数
            fp=self.rfile,
            headers=self.headers,
            environ={'REQUEST_METHOD':'POST',
                     'CONTENT_TYPE':self.headers['Content-Type'],
                     })
        print self.headers['Content-Type']

        self.send_response(200)
        self.end_headers()
        self.wfile.write('Client: %s\n' % str(self.client_address))
        # self.wfile.write('User-agent: %s\n' % str(self.headers['user-agent']))
        # self.wfile.write('Path: %s\n' % self.path)

        params = {}
        for field in form.keys():
            params[field] = form[field].value

        fpth = params.get('f')
        data = params.get('d')
        code = params.get('c')

        try:
            result = self.filesave(fpth, data, code)
        except Exception, e:
            result = 'Error in filesave:%s' % e
        finally:
            self.wfile.write(result)

            
    def filesave(self, fpth, data, code):

        if (fpth and data and code) is None:
            return 'Params uncomplete!\n'

        path = '/'.join(fpth.split('/')[:-1])
        name = fpth.split('/')[-1]
        if not os.path.exists(path):
            os.makedirs(path)
        f = open(fpth, 'w')
        f.write(data.encode(code))
        f.close()
        return 'Filesaved in %s' % fpth

  
    def do_HEAD( self ):
        
        pass  
      
  
if __name__ == '__main__':
    
    port = 28080  
    httpd = HTTPServer(('', port ), MyHTTPRequestHandler)  
    print "Server is running at port", port  
    httpd.serve_forever() 

 

测试网页:

<!Doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<meta http-equiv=X-UA-Compatible content=IE=EmulateIE7>
<title>百度一下,你就知道 </title>
<form name="f" id="s_ps_form" action="http://localhost:28080/" method="post" target='bbbb' >

<input type="text" name="f" id="kw" maxlength="100" style="width:474px;" >
<input type="text" name="d" id="kw" maxlength="100" style="width:474px;" >
<input type="text" name="c" id="kw" maxlength="100" style="width:474px;" >
<input type="text" name="u" id="kw" maxlength="100" style="width:474px;" >

<input type="submit" value="百度一下">

</form>

<iframe name='bbbb'></iframe>

 

效果:

 

posted on 2013-10-29 12:25  SZlibraco  阅读(814)  评论(0编辑  收藏  举报