Python http.server源码剖析(一)
2017-06-17 14:46
411 查看
利用http.server创建的web server由两部分组成:
request handler class负责处理具体的请求,对于每个web server是不同的,需要自己定义
利用http.server创建的web server的步骤通常是
定义subclass of
handler class中为每个HTTP verb(GET, POST等) 建立相应的method,method名采用形如
创建
调用
那么
本文主要介绍这个以及一些其他细节
在
在handler class的
随后判断handler class中有无名为
其他细节
在instantiating HTTPServer的时候需要提供
关于0.0.0.0地址的解释
0.0.0.0
Socket families
Socket Programming HOWTO
HTTPServerclass和request handler class
HTTPServerclass负责listen和接收请求,对于每个web service是相同的,直接使用http.server模块中内置的就好;
request handler class负责处理具体的请求,对于每个web server是不同的,需要自己定义
利用http.server创建的web server的步骤通常是
定义subclass of
http.server.BaseHTTPRequestHandler. 即handler class.
handler class中为每个HTTP verb(GET, POST等) 建立相应的method,method名采用形如
do_GET的形式
创建
http.server.HTTPServer的instance, 自己定义的handler class and server information — particularly, the port number.
调用
HTTPServerinstance的
serve_forevermethod.
那么
HTTPServer是如何将接受到的请求交给request handler class中对应的method处理的呢?
本文主要介绍这个以及一些其他细节
HTTPServer serve_forever后就利用
select判断是否有请求到来,如有则调用其
_handle_request_noblock–>
process_request–>
finish_request
在
finish_request中会instantiating RequestHandlerClass,即调用自己定义handler class的
__init__,在
__init__会调用handler class的
handle方法–>
handle_one_request
在handler class的
handle_one_request中,首先
parse_request(),根据request中的request line来构建一个method name
mname = 'do_' + self.command,这就是为什么在handler class中定义的方法名需要采用形如
do_GET的形式。
随后判断handler class中有无名为
mname的方法,如有,则调用它;至此
HTTPServer终于将接受到的请求交给request handler class中对应的method处理了。
其他细节
在instantiating HTTPServer的时候需要提供
server_address
server_address = ('', 8000) server_address = ('0.0.0.0', 8000) # 以上两种ip address等价,意味every IPv4 address on this computer". includes the localhost address, but it also includes your computer's regular IP address.
关于0.0.0.0地址的解释
0.0.0.0
Socket families
Socket Programming HOWTO
相关文章推荐
- Web API源码剖析之HttpServer
- Python标准库源码分析:BaseHTTPServer.py
- Web API源码剖析之HttpServer
- python创建http/https server和client
- GDAL源码剖析(五)之Python命令行程序
- Python内建对象(Python 源码剖析第一章)
- Python中的整数对象(Python 源码剖析第二章)
- python http(通讯一个测试的例子Teraservertest)
- Python的SimpleHTTPServer
- Python的SimpleHTTPServer
- Python源码剖析学习二
- Tech Tip: Really Simple HTTP Server with Python
- Python源码剖析[12] —— 字典对象PyDictObject(1)
- GDAL源码剖析(五)之Python命令行程序
- Python - 15 Line HTTP Server - Web Interface For Your Tools
- GDAL源码剖析(五)之Python命令行程序
- python http(通讯一个测试的例子Teraservertest)
- Python源码剖析[13] —— 字典对象PyDictObject(2)
- Python中的List对象(Python 源码剖析第四章)
- Tech Tip: Really Simple HTTP Server with Python