位置: 编程技术 - 正文

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)

  • 企业如何代员工缴社保
  • 先到发票后到商品怎么入账
  • 为什么开发成本资本化
  • 股东归还公司借款,应该记什么科目
  • 押金收不回来没钱怎么办
  • 报关单上单位名称写千克还是kg
  • 工业企业会计报告
  • 增值税的核算方式
  • 计提的应付利息怎么冲回
  • 企业合并的会计方法选择
  • 代员工缴纳的个税放什么科目
  • 总分类一般采用什么格式
  • 分类账和明细账平行登记规则
  • 上期计提的费用是什么
  • 建筑企业包工包料的税率
  • 企业为职工社保补缴怎么办理
  • 电子发票如何报销做账
  • 其他应付款报表填列
  • 委托发行股票会亏本吗
  • 企业所得税汇算清缴扣除比例
  • 园林公司采购岗位职责
  • win7桌面图标变成了lnk
  • 怎么更新电脑系统win10
  • 个体工商户需要年审吗
  • 建筑公司合作模式有哪几种
  • 社保参保退费需要多久
  • macOS Big Sur 11.3新功能 为M1 Mac带来了iOS应用的手柄模拟功能
  • 发票备注栏可以写详见清单吗
  • php删除数据
  • 总分账与明细账关系
  • php pdo连接sqlserver
  • 波尔图葡萄牙语
  • web前端基础教程
  • 图像修复技术
  • 基于反事实因果推断的度小满额度模型
  • php 微信公众号自定义菜单
  • python opencv如何获取图片尺寸
  • 小规模纳税人升级为一般纳税人
  • mongodb数据库基本操作
  • 电子发票和纸质发票的优缺点
  • 增值税少企业所得税高吗
  • 公司送礼计入什么会计科目
  • 建筑发票开具与土增税扣有什么关系?
  • 存量资金会计处理办法
  • 存货期末计提减值准备影响当期所得税费用
  • 工程的挂靠取得收入怎么做账?
  • 采购家具分批结算方式
  • 弃置费用摊销为什么在贷方增加
  • 收到发票就是付款了吗
  • 对外投资的会计科目
  • 手工发票可以抵进项税吗
  • 企业如何进行年报
  • sql server使用sql语句
  • win10系统怎么调
  • vista server
  • win7链接联机id
  • optimize error by column count
  • Win10 64位系统下火狐浏览器打开带flash网页卡死的解决方法
  • fedora23安装
  • win8更改电脑设置在哪
  • windows自带视频
  • win10 build 21277
  • 返回场景和音乐的区别
  • 安卓 游戏软件
  • css中有序列表
  • jquery中的事件和事件处理有哪些
  • 安卓开源好处
  • javascript基础入门视频教程
  • listview提高效率
  • Javascript this 关键字 详解
  • 上海税务发票自动抵扣
  • 增值税进项发票勾选时间
  • 销售货物免征增值税时收取的增值税税款需计入当期损益
  • 重庆国税税务局官网
  • 新疆视同缴费指数认定?
  • 河南省单位怎么打印社保花名册
  • 北京国家税务局网上办税服务厅
  • 广东省国家税务总局稽查局局长
  • 出版社税费多少
  • 火车票是否出票查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设