论坛首页 编程语言技术论坛

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

浏览 4006 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-25  

继昨天发现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