Python BaseHTTPServer 模块解析
2015-10-16 16:05
639 查看
例子:
浏览器窗口输入:127.0.0.1:8000 + /anyurl 也可不加,加了后会打印对应的url
BaseHTTPServer:
主要包含两个类HTTPServer和BaseHTTPRequestHandler
HTTPServer:
继承SocketServer.TCPServer,用于获取请求,并将请求分配给应答程序处理
BaseHTTPRequestHandler:
继承SocketServer.StreamRequestHandler,对http连接的请求作出应答(response)
基于BaseHTTPServer 的Http Server的处理流程:
1.HTTPServer绑定对应的应答类(BaseHTTPRequestHandler )
http_server = HTTPServer(('', int(port)), ServerHTTP)
2.监听端口:
http_server.serve_forever()
serve_forever()方法使用select.select()循环监听请求,当接收到请求后调用
当监听到请求时,取出请求对象
3.应答:
创建新线程以连接对象(开始理解成请求对象)为参数实例化应答类:ServerHTTP()
应答类根据请求方式调用ServerHTTP.do_XXX处理方法
常用方法/属性:
BaseHTTPRequestHandler.path #包含的请求路径和GET请求的数据
BaseHTTPRequestHandler.command #请求类型GET、POST...
BaseHTTPRequestHandler.request_version #请求的协议类型HTTP/1.0、HTTP/1.1
BaseHTTPRequestHandler.headers #请求的头
BaseHTTPRequestHandler.responses #HTTP错误代码及对应错误信息的字典
BaseHTTPRequestHandler.handle() #用于处理某一连接对象的请求,调用handle_one_request方法处理
BaseHTTPRequestHandler.handle_one_request() #根据请求类型调用do_XXX()方法,XXX为请求类型
BaseHTTPRequestHandler.do_XXX() #处理请求
BaseHTTPRequestHandler.send_error() #发送并记录一个完整的错误回复到客户端,内部调用send_response()方法实现
BaseHTTPRequestHandler.send_response() #发送一个响应头并记录已接收的请求
BaseHTTPRequestHandler.send_header() #发送一个指定的HTTP头到输出流。 keyword 应该指定头关键字,value 指定它的值
BaseHTTPRequestHandler.end_headers() #发送一个空白行,标识发送HTTP头部结束
BaseHTTPRequestHandler.wfile #self.connection.makefile('rb', self.wbufsize) self.wbufsize = -1 应答的HTTP文本流对象,可写入应答信息
BaseHTTPRequestHandler.rfile #self.connection.makefile('wb', self.rbufsize) self.rbufsize = 0 请求的HTTP文本流对象,可读取请求信息
更多属性和方法可查看模块源码
#coding=utf-8 ''' Created on 2015-7-20 @author: xhw @explain: 实现GET方法和POST方法请求 ''' from BaseHTTPServer import HTTPServer,BaseHTTPRequestHandler import urllib class ServerHTTP(BaseHTTPRequestHandler): def do_GET(self): path = self.path print path #拆分url(也可根据拆分的url获取Get提交才数据),可以将不同的path和参数加载不同的html页面,或调用不同的方法返回不同的数据,来实现简单的网站或接口 query = urllib.splitquery(path) print query self.send_response(200) self.send_header("Content-type","text/html") self.send_header("test","This is test!") self.end_headers() buf = '''<!DOCTYPE HTML> <html> <head><title>Get page</title></head> <body> <form action="post_page" method="post"> username: <input type="text" name="username" /><br /> password: <input type="text" name="password" /><br /> <input type="submit" value="POST" /> </form> </body> </html>''' self.wfile.write(buf) def do_POST(self): path = self.path print path #获取post提交的数据 datas = self.rfile.read(int(self.headers['content-length'])) datas = urllib.unquote(datas).decode("utf-8", 'ignore') self.send_response(200) self.send_header("Content-type","text/html") self.send_header("test","This is test!") self.end_headers() buf = '''<!DOCTYPE HTML> <html> <head><title>Post page</title></head> <body>Post Data:%s <br />Path:%s</body> </html>'''%(datas,self.path) self.wfile.write(buf) def start_server(port): http_server = HTTPServer(('', int(port)), ServerHTTP) http_server.serve_forever() if __name__ == "__main__": start_server(8000)
浏览器窗口输入:127.0.0.1:8000 + /anyurl 也可不加,加了后会打印对应的url
BaseHTTPServer:
主要包含两个类HTTPServer和BaseHTTPRequestHandler
HTTPServer:
继承SocketServer.TCPServer,用于获取请求,并将请求分配给应答程序处理
BaseHTTPRequestHandler:
继承SocketServer.StreamRequestHandler,对http连接的请求作出应答(response)
基于BaseHTTPServer 的Http Server的处理流程:
1.HTTPServer绑定对应的应答类(BaseHTTPRequestHandler )
http_server = HTTPServer(('', int(port)), ServerHTTP)
2.监听端口:
http_server.serve_forever()
serve_forever()方法使用select.select()循环监听请求,当接收到请求后调用
当监听到请求时,取出请求对象
3.应答:
创建新线程以连接对象(开始理解成请求对象)为参数实例化应答类:ServerHTTP()
应答类根据请求方式调用ServerHTTP.do_XXX处理方法
常用方法/属性:
BaseHTTPRequestHandler.path #包含的请求路径和GET请求的数据
BaseHTTPRequestHandler.command #请求类型GET、POST...
BaseHTTPRequestHandler.request_version #请求的协议类型HTTP/1.0、HTTP/1.1
BaseHTTPRequestHandler.headers #请求的头
BaseHTTPRequestHandler.responses #HTTP错误代码及对应错误信息的字典
BaseHTTPRequestHandler.handle() #用于处理某一连接对象的请求,调用handle_one_request方法处理
BaseHTTPRequestHandler.handle_one_request() #根据请求类型调用do_XXX()方法,XXX为请求类型
BaseHTTPRequestHandler.do_XXX() #处理请求
BaseHTTPRequestHandler.send_error() #发送并记录一个完整的错误回复到客户端,内部调用send_response()方法实现
BaseHTTPRequestHandler.send_response() #发送一个响应头并记录已接收的请求
BaseHTTPRequestHandler.send_header() #发送一个指定的HTTP头到输出流。 keyword 应该指定头关键字,value 指定它的值
BaseHTTPRequestHandler.end_headers() #发送一个空白行,标识发送HTTP头部结束
BaseHTTPRequestHandler.wfile #self.connection.makefile('rb', self.wbufsize) self.wbufsize = -1 应答的HTTP文本流对象,可写入应答信息
BaseHTTPRequestHandler.rfile #self.connection.makefile('wb', self.rbufsize) self.rbufsize = 0 请求的HTTP文本流对象,可读取请求信息
更多属性和方法可查看模块源码
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法