位置: 编程技术 - 正文

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)

  • 销售商品返还现金
  • 免抵退税和留抵退税可以一起退吗
  • 注销股本对所有股票影响
  • 小规模纳税人年应税销售额标准是
  • 开发票税前税后
  • 境外中资企业转让股权的涉税处理
  • 工伤医疗费全赔吗
  • 资产损失税前扣除及纳税调整明细
  • 有限合伙企业转让投资股权
  • 采购运输管理系统
  • 委托生产企业和受托生产企业
  • 房屋出租要交产证吗
  • 差额内部收益率大于基准收益率
  • 税务与审计调整结果不一致该如何调整?
  • 一般纳税人简易征收3%
  • 加计扣除汇算清缴怎么调减
  • 养牛需要活动场地吗
  • 一般纳税人如何零申报
  • 7年利率多少
  • 利润表所得税费用计算公式
  • 火车票抵扣进项税需要认证吗
  • 季度申报财务报表如何更改
  • 集体企业属于事业单位吗
  • 苗木免税票能随便开吗
  • 多交的增值税可以抵所得税吗?
  • 预付的各种押金
  • 银行承兑电子汇票到期要怎么操作
  • 研发费用申报表汇算清缴怎么填
  • mac双系统删除window后怎么重新恢复
  • 公司设备租赁给客户怎么做科目
  • 好的投资理财项目
  • php+mysql+apache
  • php is_writable
  • 外商独资企业在中国上市简称什么
  • 职工报工伤后用人单位还有赔偿吗
  • 软件服务费应计入什么
  • matlab绘图总结
  • 广告系统源码
  • phpstudy修改php版本
  • 实际缴纳的增值税是什么意思
  • 非金融企业之间借款
  • 记账凭证错了
  • 不抵扣的进项税额用不用转出
  • 水电费专用发票模板
  • 生产工人工资属于生产过程中发生的费用吗
  • mysql 分片优缺点
  • 公司支付的工伤待遇包括哪些
  • 长期待摊费用的摊销期限应该是
  • 个人工资税收怎么计算年收入
  • 成本少了怎么处理
  • 生产经营收入总额填什么金额
  • 前程无忧效果怎么样
  • 小规模公司月末报税吗
  • 现成的财务报表
  • 投入产出比的计算依据
  • sql分页查询怎么实现
  • Linux下mysql 5.6.17 安装图文教程
  • win8.1无法进入系统
  • window终端是什么
  • bios设置网卡开启
  • win10怎么用键盘重启
  • xp系统无法停用wifi连接
  • WinCinemaMgr.exe - WinCinemaMgr是什么进程
  • Linux中环境变量的用法
  • Win7摄像头怎么打开
  • linux安装编译工具
  • linux服务器搭建实战详解
  • win8关机慢怎么办
  • win10系统怎么设置开机启动项
  • jQuery Ajax请求后台数据并在前台接收
  • 深入理解中国式现代化
  • 欢迎使用微信支付
  • python中deque
  • android 动态化方案
  • python web框架2023
  • 湖北税务局2021新通知
  • 国税纳税服务有哪些项目
  • 岗位回避什么意思
  • 财税知识
  • 税务征收社保费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设