Python Internet

来源:互联网 发布:maven java web项目 编辑:程序博客网 时间:2024/06/18 11:29

今天的进度更新到《python标准库》的第十二章 Internet。
初读之下,略感陌生,拿起了之前只读了1/3的《自顶向下方法》复习起来,结合之前的Tcp/Udp的一些小demo之后,感觉理解和思考更进了一个层次,之前很多掠过一眼的东西,现在能引起我的思考。愿一步一个脚印。
今天主要打了HTTP中 GET和POST两大方法的实现。虽然书中给出的报文似乎不是很标准,但是对其实现有了更进一步的思考。
基于BaseHTTPServer这个库,实现关于自己的GET POST等方法。下面附上代码

from BaseHTTPServer import BaseHTTPRequestHandlerimport  cgiclass PostHandler(BaseHTTPRequestHandler):    def do_POST(self):        form = cgi.FieldStorage(            fp=self.rfile,            headers=self.headers,            environ={'REQUEST_METHOD':'POST',                     'CONTENT_TYPE':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)        self.wfile.write('From data:\n')        for field in form.keys():            field_item = form[field]            if field_item.filename:                file_data = field_item.file.read()                file_len = len(file_data)                del file_data                self.wfile.write(                    '\tUpload %s as "%s"(%d bytes)\n'%\                    (field , field_item.filename,file_len)                )            else:                self.wfile.write('\t%s=%s\n'%                                 (field,form[field].value))        returnif __name__ == '__main__':    from BaseHTTPServer import HTTPServer    server = HTTPServer(('localhost',8080),PostHandler)    server.serve_forever()

这是POST方法实现

   from BaseHTTPServer import BaseHTTPRequestHandlerimport urlparseclass GetHandler(BaseHTTPRequestHandler):    def do_GET(self):        parsed_path = urlparse.urlparse(self.path)        message_parts = [            'CLIENT VALUES:',            'client_address = %s (%s)'%(self.client_address,                                        self.address_string()),            'command=%s'%self.command,            'path=%s',self.path,            'real path=%s'%parsed_path.path,            'query=%s'%parsed_path.query,            'request_version=%s'%self.request_version,            '',            'SERVER VALUES:',            'server_version=%s'%self.server_version,            'sys_version=%s'%self.sys_version,            'protocol_version=%s'%self.protocol_version,            '',            'HEADERS RECEIVED:'        ]        for name,value in sorted(self.headers.items()):            message_parts.append('%s=%s'%(name,value.rstrip()))        message_parts.append('')        message = '\r\n'.join(message_parts)        self.send_response(200)        self.end_headers()        self.wfile.write(message)        returnif __name__ =='__main__':    from BaseHTTPServer import HTTPServer    server = HTTPServer(('localhost',8080),GetHandler)    server.serve_forever()

这是GET方法实现
里面还有一些不懂的地方,明日再战吧。

0 0