`
phyeas
  • 浏览: 161507 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

在Python3.0中使用HTTPServer处理web请求

阅读更多

继昨天发现wsgi在有点问题而无法使用它来处理web请求后,我在官方文档中看到了一个http.server模块,于是转而研究它而非WSGI。这个模块中有两个重要的类,分别为HTTPServer和BaseHTTPRequestHandler,还有两个示例类,SimpleHTTPRequestHandler,CGIHTTPRequestHandler。还有一个测试方法(test),我参考其中的示例类写了一个HelloWorld程序。上代码:

from http.server import HTTPServer,BaseHTTPRequestHandler
import io,shutil

class MyHttpHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        r_str="Hello World"
        enc="UTF-8"
        encoded = ''.join(r_str).encode(enc)
        f = io.BytesIO()
        f.write(encoded)
        f.seek(0)
        self.send_response(200)
        self.send_header("Content-type", "text/html; charset=%s" % enc)
        self.send_header("Content-Length", str(len(encoded)))
        self.end_headers()
        shutil.copyfileobj(f,self.wfile)

httpd=HTTPServer(('',8080),MyHttpHandler)
print("Server started on 127.0.0.1,port 8080.....")
httpd.serve_forever()

 运行代码,成功,浏览器输出正常。

如果将这行代码:

        shutil.copyfileobj(f,self.wfile)

 改为:

        self.wfile.write(r_str)

 就会出现昨天的错误。 TypeError: send() argument 1 must be string or buffer, not str

OK,这个错误到此算是有了一个圆满的结局。

各位对于处理web请求还有什么其他的方法麻烦告诉我。唉,又浪费了上班时间,工作了,呵呵,主业不是python。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics