#-*- encoding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')# @explain: 实现GET方法和POST方法请求from  BaseHTTPServer import HTTPServer,BaseHTTPRequestHandler
import urllibclass ServerHTTP(BaseHTTPRequestHandler):def do_GET(self):#针对GET请求方式的应答函数print"----------------------------------GET----------------------------------"path = self.path#127.0.0.1:8000/wahaha提取出路径的后面部分print path#拆分url(也可根据拆分的url获取Get提交才数据),可以将不同的path和参数加载不同的html页面,或调用不同的方法返回不同的数据,来实现简单的网站或接口query = urllib.splitquery(path)print "query=",queryself.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)#GET方法对应的请求方式 curl -i 127.0.0.1:8000/wahahadef do_POST(self):#针对post请求方式的应答函数print"---------------------------------POST---------------------------------"path = self.pathprint 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)#curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}'  127.0.0.1:8000/wahahadef start_server(port):http_server = HTTPServer(('', int(port)), ServerHTTP)#HTTPServer绑定对应的应答类ServerHTTPhttp_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 BaseHTTPServer 模块解析相关推荐

  1. python requests模块解析html_用python3教你任意Html主内容提取

    0x1 工具准备 工欲善其事必先利其器,爬取语料的根基便是基于python. 我们基于python3进行开发,主要使用以下几个模块:requests.lxml.json. 简单介绍一个各模块的功能 0 ...

  2. python inspect模块解析

    来源:https://my.oschina.net/taisha/blog/55597 inspect模块主要提供了四种用处: (1) 对是否是模块,框架,函数等进行类型检查. (2) 获取源码 (3 ...

  3. Python - names模块解析(海量英文名)

    安装:pip3 install -i https://pypi.douban.com/simple names 官方文档:https://pypi.org/project/names/ 使用: > ...

  4. python—bs4模块解析

    一.前言 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...

  5. python dis模块解析

    Python代码是编译成字节码(Bytecode)再放到CPython编译器中执行,而dis模块可以将python代码分解为字节码.先上一段代码 在输出中,11代表原python代码所在的行数,0代表 ...

  6. python matplotlib模块解析_Python数据分析模块二:Matplotlib

    1. Matplotlib简介 Matplotlib是目前应用最广泛的用于制图及其他二维数据可视化的Python库.在命令行中输入pip install matplotlib即可进行安装.在matpl ...

  7. python lxml模块解析html_用lxml解析HTML

    先演示一段获取页面链接代码示例: #coding=utf-8 from lxml import etree html = ''' 友情链接查询 - 站长工具 Top News World News o ...

  8. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  9. python中json模块_Python使用内置json模块解析json格式数据的方法

    本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...

最新文章

  1. Transformer深至1000层还能稳定训练,微软实习生一作,LSTM之父转发
  2. inittab 文件分析
  3. python语言有什么用-Python到底有什么用?为什么那么多人都在学Python?
  4. 原 荐 简单说说Kafka中的时间轮算法
  5. malloc和new有什么区别
  6. 设计模式(一):工厂方法
  7. https open api_Web上的分享(Share)API
  8. IO多路复用(select,poll,epoll)详解
  9. 计算机结构化思维学计算机,基于结构化知识的学习/思考机器和学习/思考方法以及计算机系统和信息生成方法...
  10. Mysql 解决emoji表情处理问题 - Incorrect string value: ‘\xF0\x9F\x92\x94‘ for column
  11. 搭建MySQL高可用架构MHA
  12. 转载:jillzhang的文章索引 包括(Nhiberate,WCF,WPF,项目管理等内容)
  13. 在虚函数 声明中写override的作用
  14. 我收藏的PDF电子书第一部分
  15. VIT实战总结:非常简单的VIT入门教程,一定不要错过
  16. 指标波动的原因很头疼?不妨试试“问诊”法!
  17. Vultr Debian8系统一键快速DD安装Windows7系统
  18. 计算机组成原理白中英第七章,计算机组成原理第七章课件(白中英版).ppt
  19. 路德维希·冯·米塞斯
  20. Pandas实战-DataFrame对象

热门文章

  1. python玩转大数据视频[非原创视频]
  2. MAC地址如何在windows与unix下查看?
  3. UBUNTU下彻底删除MYSQL
  4. arm-linux-ld: cannot find -lgcc,/arm-linux-gnueabi/bin/ld: cannot find crt1.o
  5. 安装electron报错
  6. 安卓代码迁移:ActionBarActivity: cannot be resolved to a type
  7. day15:磁盘格式化和挂载
  8. css3实现流星坠落效果
  9. Android应用框架浅析
  10. iOS技术周报-第28期