位置: 编程技术 - 正文

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)

  • 小企业汇算清缴要审计报告吗
  • 企业收取的租金应当计入
  • 劳务费税率计算公式
  • 独立法人有什么风险
  • 一般纳税人缴纳税金分录
  • 进项票和销项票是什么意思
  • 查看企业用什么软件
  • 营业外支出为负数怎么处理
  • 房屋租赁和服务费发票的区别
  • 小型企业利润表
  • 跨年发票是否可以报销 审计
  • 购买折让
  • 公司偷税漏税是当事人责任大还是法人责任大
  • 税负的含义
  • 行政机关作出下列行为属于行政复议的范围
  • 火车车票怎么样
  • 营改增阶段
  • 小微企业利润亏损原因
  • 计提坏账准备需要纳税调增吗
  • 已进行账务处理怎么处理
  • 发票冲红有时间要求吗
  • 怎么查银行账户余额
  • 小规模库存商品结转成本太低怎么办
  • 现金支付给个人
  • 劳务派遣 税务
  • 地下车库怎么缴费
  • 跨年冲暂估如何做账?
  • 客户的佣金
  • 企业所得税调增调减项目比例
  • 房地产企业能申请破产吗
  • windows11永久解决蓝屏
  • paytime.exe - paytime是什么进程 有什么用
  • 股东帮企业还款违法吗
  • 车辆赔偿款收条怎么写
  • 为什么要把收入当成舞弊假定
  • uniapp怎么做适配
  • 新成立公司建账
  • 无需本地部署的软件
  • js实现继承属性功能
  • 面试宝典下载
  • 管家婆付款单凭证科目如何修改
  • python字符串中变量替换
  • 现代服务印花税税率
  • 刷题笔贴吧
  • 营业外收入需要报增值税吗
  • 工资表社保表格怎么算
  • 未开票收入下月开票
  • python怎么过滤多余空格
  • 年末财务报表是什么
  • 小规模纳税人企业所得税怎么算
  • 去年的成本发票做错了需要补税吗
  • 一般纳税人增值税申报表怎么填写
  • 长期待摊费用未摊销完一次性处理怎么走
  • 产品销售收入的确认条件
  • 购入研发设备可以抵扣吗
  • 开了20万销项进项为0交多少税
  • 生产成本明细账怎么填图片
  • sqlserver连接失败怎么办
  • Ubuntu下mysql与mysql workbench安装教程
  • 电脑显示配置windows
  • 如何调整bios
  • win7连接宽带
  • linux7修改ssh端口
  • ubuntu怎么播放视频
  • SWNETSUP.EXE - SWNETSUP是什么进程 有什么用
  • 360se是什么文件夹
  • 苹果Mac系统怎么用光盘安装
  • WIN10如何禁用驱动程序强制签名
  • linux怎么开启root权限
  • Win7系统怎么打开蓝牙
  • win7共享文件设置
  • 怎么删除listview条目
  • Tutorial 8:Scaling Transformation
  • Extjs 4.x 得到form CheckBox 复选框的值
  • nodejs入门教程
  • vscode 远程调试jni
  • 单位个人所得税网上申报流程
  • 监察室主任岗位职责
  • 浙江省工伤停工留薪期分类目录
  • 公司完税证明去哪里打
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设