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