浏览 1764 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-31
最后修改:2009-03-31
前面一直使用HTTPServer对web请求进行处理,今天突然想能不能改下,用python3提供的wsgiref进行处理,原来的程序: from wsgiref.simple_server import make_server def hello_world_app(env,start_response): start_response("200 OK",[("Content-type","text/plain;charset=utf-8")]) return ["Hello World!!"] if __name__ == "__main__": httpd=make_server('',8080,hello_world_app) httpd.handle_request()
问题并不在这个程序,异常报的是在write的时候,于是,要改的就是write,改哪里呢? 就改ServerHandler 这个类在wsgiref包里的simple_server.py模块中(Lib/wsgiref/simple_server.py) 原来的ServerHandler是: class ServerHandler(SimpleHandler): server_software = software_version def close(self): try: self.request_handler.log_request( self.status.split(' ',1)[0], self.bytes_sent ) finally: SimpleHandler.close(self) 重写_write方法即可: class ServerHandler(SimpleHandler): server_software = software_version def close(self): try: self.request_handler.log_request( self.status.split(' ',1)[0], self.bytes_sent ) self.buf_data.seek(0) shutil.copyfileobj(self.buf_data,self.stdout) finally: SimpleHandler.close(self) def _write(self,data): if not hasattr(self,"buf_data"): self.buf_data=io.BytesIO() if type(data) is str: data=data.encode("UTF-8") self.buf_data.write(data) 大功告成。 测试 http://localhost:8080,Hello World出来了!
为了方便调试,这里的编码直接写UTF-8了。各位根据自己的需要配置。。 如果需要使用多线程处理,可以用上一篇文章提到的ThreadingMixIn即可。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |