python简易web服务器学习笔记
import BaseHTTPServer #------------------------------------------------------------------------------- class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): '''Handle HTTP requests by returning a fixed 'page'.''' # Page to send back. Page = '''\ <html> <body> <p>Hello, web!</p> </body> </html> ''' # Handle a GET request. def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.send_header("Content-Length", str(len(self.Page))) self.end_headers() self.wfile.write(self.Page) #------------------------------------------------------------------------------- if __name__ == '__main__': serverAddress = ('', 8080) server = BaseHTTPServer.HTTPServer(serverAddress, RequestHandler) server.serve_forever()
web服务器基本思想:
1.等待用户连接我们的站点并发送一个http请求
2.解析请求,
3.计算出它所请求的
4.获取数据(或动态生成)
5.格式化数据为HTML
6.返回数据
步骤1,2,6可以用python标准库中的BaseHttpServer模块实现。HttpServer是一个该模块的一个子类。它创建并监听http socket,发送请求到一个处理程序
库里面的BaseHTTPRequestHandler类负责解析传进来的HTTP请求,并判断请求包含的方法。如果方法是GET,类将调用do_GET方法。我们的类RequestHandler重写了该方法以动态生成一个简单的页面,文本页面存储在类级别变量中,我们将在发送给客户端200响应码,首部content-Type字段以告诉客户端将返回的数据解析为html,页面长度之后发送它,(end_headers
方法调用 插入空行以分隔首部和页面本身。)
wow,200响应码是什么东西,常见的响应码有这些
“200” :OK
301 : move permanently 永久转移
302 : found 暂时转移
307 : temporary redirect 申明请求的资源临时性删除
400 : bad request 错误请求
401 : nauthorized 未认证
403: forbidden 在其他地址发现了请求数据(禁止?)
404 :not found 没有找到
之后我们需要启动服务器。以一个元组定义了服务器地址:空字符串表示“在当前主机上运行”,8080标识了端口。于是以这个元组为参数创建一个实例,要求它一直运行(直到强退)
在浏览器上127.0.0.1:8080就能看到它啦,访问之后还可以看到do_GET里输出的信息。wow
参考资料:500 lines or less