python之HTTP模块

我学习的习惯,除了学习如何使用,还喜欢研究源码,学习运行机制,这样用起来才会得心应手或者说,使用这些语言或框架,就和平时吃饭睡觉一样,非常自然;因为最近有接触到bottleflask web框架,所以想看下这两个的源码,但是这两个框架是基于python语言自带的http,因此就有了这篇文章;

python http简单例子

python http框架主要有serverhandler组成,server主要是用于建立网络模型,例如利用epoll监听sockethandler用于处理各个就绪的socket;先来看下python http简单的使用:

import sys

from http.server import HTTPServer,SimpleHTTPRequestHandler

ServerClass = HTTPServer

HandlerClass = SimpleHTTPRequestHandler

if__name__ =='__main__':

port = int(sys.argv[2])

server_address = (sys.argv[1],port)

httpd = ServerClass(server_address,HandlerClass)

sa=httpd.socket.getsockname()print("Serving HTTP on",sa[0],"port",sa[1],"...")

try:

httpd.serve_forever()

except KeyboardInterrupt:print("\nKeyboard interrupt received, exiting.")

httpd.server_close()

sys.exit(0)

  运行上述例子,可以得到如下:

python3 myhttp.py 127.0.0.1 9999

  此时如果在当前文件夹新建一个index.html文件,就可以通过 http://127.0.0.1:9999/index.html 访问了index.html页面了。

  这个例子的server类用的是HTTPServerhandler类是SimpleHTTPRequestHandler,因此当HTTPServer监听到有request到来时,就把这个request丢给SimpleHTTPRequestHandler类求处理;ok,了解这些之后,我们开始分别分析下serverhandler.

httpserver

http模块的设计充分利用了面向对象的继承多态,因为之前有看了会tfs文件系统的代码,所以再看python http时,没那么大的压力;先给出server的继承关系

+------------------+

+------------+| tcpserver基类 |

| BaseServer +-------->| 开启事件循环监听 |

+-----+------+ | 处理客户端请求 |

| +------------------+

v +-----------------+

+------------+| httpserver基类 |

| TCPServer +-------->+设置监听socket |

+-----+------+ | 开启监听 |

| +-----------------+

v

+------------+

| HTTPServer |

+------------+

  继承关系如上图所示,其中BaseServerTCPServer在文件socketserver.pyHTTPServerhttp/server.py;我们先看下来BaseServer

BaseServer

  因为BaseServer是所有server的基类,因此BaseServer尽可能抽象出所有server的共性,例如开启事件监听循环࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值