位置: 编程技术 - 正文

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)

  • 带息负债融资成本率意义
  • 企业所得税会计科目
  • 税务局防范税收风险的措施
  • 政府会计制度等式
  • 小规模现金流量表的编制方法和计算公式
  • 小规模税收优惠政策1%到什么时候
  • 季度申报残保金怎么填写
  • 财务报表没有申报表
  • 开房屋租金发票需要带什么资料
  • 向境外分配股息
  • 红字发票信息开错该怎么撤回与相关会计处理
  • 年度纳税申报时间规定
  • 个人所得税允许扣除的费用
  • 购买东西进项税在借方还是贷方
  • 挂靠企业所得税怎么办?
  • 从政府取得土地没有进项
  • 税务局开收据的流程
  • 职工培训费进项能抵扣吗
  • 房地产活动礼品送什么比较吸引人
  • 结转报告中错误结转科目是什么意思
  • 存货的主要内容包括什么
  • 个人所得税是次月申报上月的吗怎么填
  • 营改增的真实目的
  • 每个月工资都不一样,怎么计算个税
  • "明股实债“的税务风险,你真的清楚吗?
  • 印花税减半优惠政策2019
  • 个税申报状态失败
  • 自查补缴税款严重吗
  • 没有发票的房租调增金额怎算
  • 暑假工需要什么条件
  • 是否所有电池产品都需在进口环节缴纳消费税?
  • 增值税小规模纳税人优惠政策
  • win7安装sqlserver2008
  • 原材料进项税税率
  • adsl灯一直闪烁
  • 商场外面的广告牌叫什么
  • 外资企业取得财产的条件
  • 土地受让方交的税是什么
  • php发送邮件的问题有哪些
  • 普通发票主营业务怎么填
  • php文字转语音源码
  • 建筑劳务费发票有进项抵扣吗
  • 最好的ph计
  • python 批量
  • dict.setdefault()在python中设置默认值
  • 电子税务局如何增加税种认定
  • mysql load local
  • 一般纳税人暂未开具发票
  • 发票入账是什么意思
  • 阶段性减免社保费政策期限延长
  • 公司交的养老保险的钱可以取出来吗
  • 开具成品油发票时注意事项是?
  • 报关单金额大于出口发票金额
  • 预缴的增值税在增值税附表四怎么填
  • 公司的房租发票怎么开
  • 收到货物抵账的会计分录
  • 实收资本没到账缴纳印花税吗
  • 结转清理净损失怎么算
  • 年末递延所得税资产的账面余额
  • 修建的道路怎么做账
  • 免抵税额和免抵退税额一样吗
  • 个体户需要报税吗?需要报哪些税?
  • mysql新手入门
  • windows下mysql安装配置教程
  • winxp关机立马自动重启
  • 如何在windows中对硬盘进行分区
  • Windows Server 2008如何改动服务器名称与管理员密码?
  • winpe.wim怎么安装
  • css vh兼容性
  • 好用的shell终端
  • window.navigate 与 window.location.href 的使用区别介绍
  • python基础教程 入门教程
  • python爬虫代理ip巨量http 代理8元/日
  • js的异步解决方案有哪些
  • jquery表单事件实例
  • 一般纳税人开红字发票怎么报税
  • 司法拍卖车免除扣分吗
  • 湖北省电子税务局登录入口
  • 个体工商户自己开普票流程
  • 地税应急管理办法最新
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设