位置: 编程技术 - 正文

python自带的http模块详解

编辑:rootadmin

推荐整理分享python自带的http模块详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

挺久没写博客了,因为博主开始了今年另一段美好的实习经历,学习加做项目,时间已排满;很感谢今年这两段经历,让我接触了golang和python,学习不同语言,可以跳出之前学习c/c++思维的限制,学习golang和python的优秀特性以及了解在不同的场景,适用不同的语言;而之前学习linux和c/c++,也使我很快就上手golang和python;

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

python http简单例子

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

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

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

python自带的http模块详解

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

http之server

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

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

BaseServer

因为BaseServer是所有server的基类,因此BaseServer尽可能抽象出所有server的共性,例如开启事件监听循环,这就是每个server的共性,因此这也是BaseServer主要做的使;我们来看下BaseServer主要代码部分

代码中的selector其实就是封装了select,poll,epoll等的io多路复用,然后将服务自身监听的socket注册到io多路复用,开启事件监听,当有客户端连接时,此时会调用self._handle_request_noblock()来处理请求;接下来看下这个处理函数做了啥;

_handle_request_noblock函数是一个内部函数,首先是接收客户端连接请求,底层其实是封装了系统调用accept函数,然后验证请求,最后调用process_request来处理请求;其中get_request是属于子类的方法,因为tcp和udp接收客户端请求是不一样的(tcp有连接,udp无连接)

我们接下来再看下process_request具体做了什么;

process_request函数先是调用了finish_request来处理一个连接,处理结束之后,调用shutdown_request函数来关闭这个连接;而finish_request函数内部实例化了一个handler类,并把客户端的socket和地址传了进去,说明,handler类在初始化结束的时候,就完成了请求处理,这个等后续分析handler时再细看;

标签: python自带的http模块详解

本文链接地址:https://www.jiuchutong.com/biancheng/383458.html 转载请保留说明!

上一篇:Python程序中设置HTTP代理(python函数设置)

下一篇:简单谈谈python中的多进程(python的cumprod)

  • 资产损失税前扣除及纳税调整明细表
  • 个体户需要做利润分析吗
  • 填写了领款单还要填报销单吗
  • 税申报后未交款是否可撤销?
  • 合并扣税项是什么科目
  • 企业所得税前可以扣除的项目
  • 注销税务登记申请书
  • 未达账项怎么做会计分录
  • 转售水的税率
  • 房地产开发桩基施工方案
  • 医院的固定资产是由财务负责的吗?
  • 报废物资收入计入什么科目旧准则
  • 建筑服务税率是5
  • 呆帐死帐处理
  • 计提坏账准备需要什么附件
  • 增值税申报错误怎么处理
  • 一般纳税人专票和普票有什么区别
  • 给股东分配股利
  • win10怎么清空
  • 无法加载响应数据 对于预检请求没有可显示的内容
  • 薪酬总额包干什么意思
  • PHP:curl_pause()的用法_cURL函数
  • 如何选购汽车
  • 汽车报废残值收入怎么做账
  • php连接数据库代码是什么
  • excel js宏
  • iis 7下安装laravel 5.4环境的方法教程
  • 前端面试题目100及最佳答案
  • 分公司独立核算和非独立核算哪个好
  • 借银行存款贷预收账款
  • RTX 4090深度学习性能实测奉上!模型训练可提升60~80%
  • Yii2 rbac权限控制之rule教程详解
  • web前端面试题2021及答案
  • php中字符串的连接运算符是( )
  • 普通发票可以跨年报销吗
  • phpcms怎么样
  • 固定资产提足折旧后,不论能否继续使用
  • 一般纳税人购进免税农产品如何抵扣进项税额
  • 出租车计入什么费
  • python科学计算库有哪些
  • 帝国cms怎么用
  • 纳统全称
  • 六税一费和六税两费的区别
  • 预缴税款是什么意思
  • 企业的资产必须符合哪些条件
  • 材料采购账务处理思维图怎么做
  • sql server 18486
  • sql2008怎么查询
  • mysql安装问题
  • 做账的好处
  • 待摊费用和预提费用都属于资产类科目
  • 销售折让的会计分录怎么做
  • 预缴的增值税放哪个科目
  • 缴纳房产税如何做账务处理
  • 支付给烟农的价格怎么算
  • 损益类科目结转本年利润方向
  • 统计得到的一组数据有80个
  • mac系统小技巧
  • 操作系统有哪些
  • centos 7安装桌面
  • cocos2dx游戏开发教程
  • Visual Studio 2013 Tools for Unity安装目录,Visual Studio 2013 Tools.unitypackage
  • js创建类对象的方法
  • Extjs TimeField 显示正常时间格式的代码
  • bat获取当前路径的值
  • angular做app
  • js判断输入用户名是否正确
  • node.js中的http.createServer方法使用说明
  • unity shader视频教程
  • jquery版本区别
  • 安卓手机管家
  • wxpython怎么用
  • javascript面向对象 第三方类库
  • 财务审计报告出现数据错误怎么处理
  • 贵阳国家高新技术产业开发区管理委员会
  • 房屋租赁税率是6还是9
  • 云南省地方税务局官网
  • 江苏省的发票如何查验真伪
  • 国税局辽宁省国税局
  • 电子增值税专用发票和纸质增值税专用发票的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设