位置: 编程技术 - 正文

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)

  • 委托加工应税消费品代扣代缴
  • 附加税期末余额在贷方怎么处理
  • 分公司独立核算还需要总公司汇总缴纳吗
  • 附加税减半征收政策从什么时候开始
  • 服务,不动产和无形资产扣除项目本期实际扣除金额
  • 付了定金一定会有货吗
  • 用友薪资管理怎么重新初始化步骤
  • 运费单是什么
  • 地税印花税怎么算
  • 设备销售并负责安装税率是多少
  • 实收资本印花税最新规定
  • 发票报账的基本流程
  • 2020年资金账簿印花税最新规定
  • 境外单位或者个人
  • 《外出经营活动税收管理证明》收购发票
  • 普通股资本成本计算方法
  • 小微企业减免所得税
  • 现金流风险分析
  • 应付的职工薪酬
  • 购买土地交易费用怎么算
  • 网卡运行异常
  • 远程主机强迫关闭了现有连接我的世界
  • 预付款挂账什么意思
  • 企业购入固定资产一次性税前扣除
  • 内部员工租房租金合法吗
  • 进项发票认证操作
  • 诺曼底作战
  • vue watch监听vuex数据
  • 奖金发放的原则
  • phpstrcmp函数
  • yii2项目实战之restful api授权验证详解
  • 公司报亏损需要交税吗
  • 森林中的结香花,日本 (© nattya3714/Getty Images)
  • 餐饮手撕票在哪里买多少钱
  • 培训学校主营业务成本明细科目设置
  • 哪些项目计入其他应收款
  • antv g6 node 嵌套
  • vue该怎么学
  • 遍历目录文件
  • 员工持股平台合伙企业
  • 汽车以旧换新怎么操作
  • 其他权益工具投资是什么类科目
  • 委托 研发费用
  • 已认证发票被作废
  • 现金折扣退回要考虑财务费用吗
  • 当月认证的发票可以撤销吗
  • c语言asc函数
  • 帝国cms整合Elasticsearch
  • mysql写日志机制
  • 往来账户余额
  • mysql命令列界面
  • 销货方怎么开红字发票
  • 资金收益率的计算
  • 固定资产核销是资产损失吗
  • 外资研发中心可以上市吗
  • 什么是保函保证金
  • 事业单位劳务派遣是啥意思
  • 建筑工程人工费调整
  • 补缴税款需要交滞纳金吗
  • 国债利息收入企业所得税调增
  • 权益净利率计算公式产权比率
  • 固定资产抵账的账务处理
  • 集团内部资产无偿划转是否缴纳印花税
  • 从银行提取现金分录
  • 备查账簿有没有固定的格式
  • mysql中json格式是多少长度
  • windows任务管理
  • ubuntu启动菜单 哪个键
  • centos7创建swap分区
  • mac os固件下载
  • win8外接显示器没反应怎么办
  • unity3d读取gis数据
  • 如何用jquery
  • android 点击按钮如果数据库有数据就更新,没有就创建
  • js dom方法
  • unity ulua
  • 企业注销认缴与实缴是否还有风险
  • 税务机关对核准类减免税的审核
  • 12月份医保没有到账
  • 电子税务局备案财务会计制度
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设