位置: 编程技术 - 正文

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)

  • 销售原材料给供应商
  • 固定资产接受捐赠的计入什么科目
  • 企业所得税季度申报时间
  • 用友删除凭证后期初余额不对
  • 电子发票怎么入库
  • 利息费用和利息支出的区别计算公式
  • 为什么社保账户有钱但是卡里没钱
  • 住房补贴是不是编制才有
  • 股票交易印花税税率
  • 捐赠的所得税怎么处理
  • 预付账款年底账务怎么做账?
  • 承租承包经营个人所得税
  • 废品计入哪个科目
  • 收了款未开票凭证如何做
  • 详解非税收入
  • 不申报税务登记被注销
  • 研发费用直接投入占比过高税务预警
  • 无偿赠送资产需要交哪些税
  • 装修公司购装修材料入什么科目?
  • 手动设定ip地址后连不上网
  • 安全系统不起作用或未正确安装 cad2016
  • outlook永久保留邮件
  • 腾讯电脑管家中蓝牙在哪
  • windows11快捷操作
  • mac中的finder简介命令
  • 苹果手机麦克风模式关闭了,怎样才能打开?
  • 公司承担的社保公积金怎么做账
  • PHP:imagepsextendfont()的用法_GD库图像处理函数
  • vue 移动端
  • 人工智能课程心得体会
  • 分页的实现
  • php读取数据输出html
  • 抵扣认证发票统计确认后可以退回吗?
  • tar压缩解压缩命令
  • vue @hook
  • 深入理解php类的知识
  • 资产证券化会计处理案例
  • 支付长期借款利息时,应借记什么账户
  • 担保公司的风险准备金在报表中如何反应
  • sql server添加语句
  • 弥补以前年度亏损后怎么交所得税
  • 个人所得税专项扣除2023最新政策
  • 公司注销了就可以不发工资么
  • 业务招待费的进项票可以抵扣吗
  • 印花税减免计入什么科目
  • 第三方代销什么意思
  • 发票金额大于实际报销怎么做账
  • 长期借款涉及哪些账户
  • 工伤保险交了就可以报销吗
  • 如何做好工程后期维保
  • 自产自销的免税票
  • 销售公司中的服务是什么
  • 产品销售费用是什么科目
  • SQL函数substr使用简介
  • sql2005和2000区别
  • win9什么意思
  • windows7快速截图
  • win8系统打开软件闪退
  • sqlservr.exe - sqlservr是什么进程 有什么作用
  • 老旧的诗琴五个琴谱大全
  • win8怎么一开机就进入桌面
  • win10预览版21277
  • apache80端口被占用的解决方法
  • JavaScript中的方法名不区分大小写
  • 分析师:董明珠让格力为豪赌买单
  • 入门级啥意思
  • 用pyth
  • python读json文件和写json文件
  • 批处理删除自身命令
  • net命令大全
  • unity c#开发
  • shell脚本替换文件中某个字符串
  • javascript简明教程
  • js基于什么
  • Android mediaplayer 白屏
  • 四川省税务局发票查询
  • 税务经侦科立案标准
  • 河北省国家税务局电子税务局官网入口
  • 扬州国家税务学院在哪个区
  • 什么叫税务协查
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设