位置: 编程技术 - 正文

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)

  • 留底税额有没有时间
  • 增值税抵扣了还能作废吗
  • 员工交个人所得税对公司有什么影响
  • 清税证明是什么要钱吗
  • 金税盘软件
  • 会计凭证的数字书写示例图
  • 个税申报与社保申报一定是一致的么
  • 所得税申报表营业成本填什么数据
  • 公司注销章要销毁吗
  • 现金流量补充表的编制
  • 农产品普通发票抵扣政策
  • 建筑工程免税项目
  • 辅导期增值税一般纳税人申报材料
  • 空白增值税专用发票丢失罚款
  • 签证费怎么支付
  • 其他应收怎么调增值税
  • 某企业月末由仓库转来发料凭证汇总表
  • 工业混合销售行为如何纳税?
  • 增值税普通发票可以抵扣进项税吗
  • 以前年度少计提收入
  • 物流公司进项票多了,可以帮人开票吗
  • 公司注销了是不是就不能用了
  • 1697510605
  • 销售出库未开票怎么入账
  • 企业开办费的会计分录
  • linux怎么下载安装腾讯Tim?
  • php如何定义一个常量?常量名有哪些命名规则?
  • 生产车间闲置的固定资产
  • vue父组件调用子组件的方法报错
  • php教程全集
  • 汇总收款凭证怎么做账
  • 个人所得税申报流程图
  • 小企业会计准则2023电子版
  • 塞里雅兰瀑布图片高清
  • .net core 开发web
  • 收到退回的以前年度的劳务费怎么入账
  • 长期待摊费用属于非流动资产吗
  • 收到员工的社保费用记什么科目
  • 红字信息表重复了怎么办
  • 在网上怎么样查个人征信
  • 残保金补申报后处罚会自动取消吗
  • javascript前端开发案例教程源码
  • PHPCMS 是 ThinkPHP 开发的吗?
  • 税务机关代开的增值税发票要加盖发票专用章吗?
  • 展会补贴需要准备什么资料
  • 个税申报错误怎么退税
  • 编制利润表计算公式
  • sqlserver存储过程教程
  • 劳动仲裁赔偿款会计分录
  • 进度款开票是开实收金额吗
  • 补计提所得税怎么做分录
  • 出口应纳增值税
  • 给客户买的礼品要交税吗
  • 收单清算款计入什么费用
  • 年金现值和年金终值的例题
  • 一次性伤残补助金是单位给的还是社保给的
  • 废料收入是什么会计分录
  • 会计估计变动怎么处理
  • 其他业务收入如何开票
  • 营改增一般纳税人标准
  • airdrop怎么用?
  • window 开机启动
  • qq8.2.1版本下载正式版
  • linux修改ssh端口号启动失败
  • winex.exe - winex是什么进程
  • windows任务栏变色
  • centos7版本推荐
  • win8系统截图工具快捷键
  • win8系统教程
  • win10 固态
  • google collections
  • 粉碎文件的快捷键
  • css display:none使用注意事项小结
  • unity3d坐标转换平面坐标代码
  • javascript标签大全
  • 深圳企业所得税税率多少
  • 芜湖市房产退契税是什么政策
  • 小规模纳税人公司买车能抵多少税
  • 疫情期间增值税税率
  • 广东省国家税务局电子发票系统,网络设置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设