Requests源码分析:面试考察角度梳理

简单描述执行流程 🌟

Q:能简单描述一下发送一个requests.get(url)请求时,在requests库内部的主要执行流程吗?(从调用get方法到收到响应)

  1. 入口委托: get() 方法内部调用 requests.request('GET', url)
  2. Session 接管: request() 方法会获取或隐式创建一个 Session 对象,并调用其 request() 方法。Session 是核心,负责管理 Cookies、连接池复用和全局配置。
  3. 请求准备: Session 将传入的参数(URL、headers、params 等)合并、编码,构建成一个标准的 PreparedRequest 对象
  4. 适配器与发送: Session 根据 URL 协议 (http/https) 选择对应的 HTTPAdapterHTTPAdapter 利用底层的 urllib3 连接池 获取一个到目标服务器的连接(或新建),然后发送 PreparedRequest
  5. 处理响应:
    • 处理重定向: 如果响应是重定向 (3xx) 且允许 (allow_redirects=True),会自动处理重定向链,直到获得最终响应。
    • 构建响应:urllib3 的原始响应封装成 requests.Response 对象,设置状态码、头信息、Cookies (更新 Session)、历史记录等。
  6. 返回结果: 最终 Response 对象返回给调用者。
  7. 释放资源: 通过with requests.Session() as request: 显式使用上下文管理器,确保在退出时自动调用 request.close()释放底层的 urllib3 连接池资源,避免连接泄漏。

Session对象的作用

Q:Session 对象 (requests.Session) 的主要作用是什么?它与直接调用 requests.get/post 在底层实现上有什么关键区别

Session 是跨请求的持久化上下文管理器,核心解决 连接复用状态保持配置继承 三大问题。

  • 连接池复用:
    • 底层通过 urllib3.PoolManager 复用 TCP 连接(尤其对同一主机发起多次请求时)
    • 避免重复 TCP 握手/TLS 协商,显著提升性能
  • 状态保持:
    • 自动处理 Cookies:响应 Cookies 自动存储,后续请求自动携带
    • 持久化认证:auth 参数在会话内持续有效
  • 配置继承:
    • 统一设置全局参数
    • 支持全局 proxies, hooks, stream 等配置

注册适配器逻辑

Q:Session 如何通过 mount() 方法注册适配器?适配器与 URL 前缀的映射规则是什么?

  • 创建 Session 对象时,自动注册默认的httpshttp适配器。
    在这里插入图片描述
  • mount根据适配器的前缀长度来按序存储,前缀长的放前面,为了保证获取适配器时能按最长前缀优先匹配。
    在这里插入图片描述
  • 由于按序存储,获取adapter时,前缀匹配成功就直接返回,能获取到匹配的最长前缀适配器。
    在这里插入图片描述

Ses

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86925.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

航天VR赋能,无人机总测实验舱开启高效新篇​

(一)沉浸式培训体验​ 在传统的无人机培训中,操作人员主要通过理论学习和简单的模拟操作来掌握技能。但这种方式存在很大局限性,难以让操作人员真正感受无人机在复杂环境下的运行状态。而航天 VR 技术引入到 VR 无人机总测实验舱后,彻底改变了…

Kotlin 函数与 Lambda 表达式

今天继续分享Kotlin学习内容。 目标:掌握函数定义、调用、参数传递,以及 Lambda 表达式的基础用法 1. 函数:Kotlin 的代码模块化工具 定义:函数是可重复调用的代码块,用于封装逻辑。 语法: fun 函数名(参…

[mcp-servers] docs | AI客户端-MCP服务器-AI 架构

链接:https://github.com/punkpeye/awesome-mcp-servers 服务器调用 相关专栏:实现Json-Rpc docs:精选MCP服务器资源列表 本专栏为精选 模型上下文协议(MCP)服务器的列表。 MCP 是一种标准协议语言,允许*…

1688商品发布API:自动化上架与信息同步

一、1688商品发布API的核心功能与技术架构 1.1 API功能全景 1688商品发布API是1688开放平台的核心组件之一,支持商品信息的自动化发布、编辑、上下架及库存同步。其核心功能包括: 商品信息管理:支持商品标题、描述、价格、库存、SKU&#…

如何在x86_64 Linux上部署Android Cuttlefish模拟器运行环境

0 软硬件环境 x86_64服务器Ubuntu20.04 LTS参考:Cuttlefish 虚拟 Android 设备参考: 笔记:搭建 Cuttlefish 运行环境可以下载编好的android-cuttlefish:android-cuttlefish.tar.gz 1 系统采用Ubuntu20.04 LTS 2 搭建cuttlefish…

机器学习9——决策树

决策树 Intro 归纳学习(Inductive Learning)的目标:从训练数据中学习一般规则,应用于未见过的数据。 决策树是一个树形结构,其中: 每个分支节点表示一个属性上的选择(即决策条件)。…

CppCon 2017 学习:The Asynchronous C++ Parallel Programming Model

清晰理解 Amdahl’s Law(阿姆达尔定律),这是一条描述并行计算加速能力的核心定律。 定义公式: S 1 ( 1 − P ) P N S \frac{1}{(1 - P) \frac{P}{N}} S(1−P)NP​1​ S S S:加速比(Speedup&#xff09…

60页PPT实战方案 | 大数据决策分析平台建设全流程路径图

目录 一、什么是大数据决策分析平台? 二、为什么要做大数据决策分析平台建设? 1. 数据已经成为“资源”,但多数组织还停留在“信息孤岛” 2. 管理复杂度上升,传统报表跟不上业务节奏 3. 外部环境不确定性高,倒逼企…

芯谷科技--降压型DC-DC转换器D4005

在现代电子设备中,电源管理芯片的性能直接关系到设备的稳定性和效率。D4005以其高效、稳定的性能和广泛的应用范围,成为众多工程师在设计电源方案时的优选。 产品简介 D4005 是一款高效降压型 DC-DC 转换器,具备固定 400KHz 开关频率&#…

【51单片机节日彩灯控制器设计】2022-6-11

缘由单片机节日彩灯控制器设计-编程语言-CSDN问答 #include "reg52.h" sbit k0P1^2; sbit k1P1^3; sbit k2P1^4; sbit k3P1^5; bit k0,kk0; void main() {unsigned char Xd0;unsigned int ys0; while(1){if(k00&&Xd0){kk0;kP31;while(k00);}if(k10&&…

PyEcharts教程(010):天猫订单数据可视化项目

文章目录 1、读取数据2、数据处理3、重复值查看4、缺失值查看5、PyEcharts可视化5.1 各个省份的订单量5.2 时间序列分析5.3 每天订单量统计可视化6、数据下载1、读取数据 1️⃣读取数据: import pandas as pd from pyecharts import options as opts from pyecharts.charts …

Redis 持久化之 AOF 策略

1. 什么是 AOF AOF 是 append only file,AOF 文件中记录了每次的操作指令,在启动 Redis 时,会将 AOF 文件中的数据读取出来以恢复数据。 2. 开启 AOF Redis 默认关闭 AOF,可以通过将 Redis 配置文件中的 appendonly 设置为 ye…

实现OFD转换PDF文件的实用方法

ODF格式的文件属于国内新型的文件格式,一般应用在保密等级比较高的系统或者单位中,比如一般政务方面或者法律行业经常会用到这种类型的文件,但是有些时候我们把文件分享给别人的时候别人不一定能打开,这时候就需要把OFD文件转换成…

JSON + 存储过程:SaaS 架构下的统一接口与租户定制之道

在多租户 SaaS 系统中,不同客户往往有差异化的业务逻辑、字段要求与流程规则。传统“统一模型 配置参数”的开发模式,虽然具有可控性,但在高度动态、合作多样化的场景下,逐渐暴露出扩展困难、上线周期长、定制成本高等问题。 随…

各种常用的串口助手工具分享

记录一篇常用串口工具的文章 工具的下载链接:https://download.csdn.net/download/m0_59415345/91204823?spm1001.2014.3001.5503 各工具的使用操作说明参考嵌入式hxydj博主的文章:https://blog.csdn.net/qq_20222919/article/details/117038284

AVL树的简洁写法

文章目录 零、写在前面一、AVL 树定义1.1 性质1.2 树高的证明 二、AVL树实现(AVL树实现名次树)2.1 节点定义2.2 左/右旋转2.3 zig-zag / zag-zig 双旋2.4 重平衡函数2.5 插入2.6 删除2.7 排名查询2.8 查前驱/后继2.9 查第 k 小2.10 完整代码 三、online …

红外图像增强(dde):基于“基础层-细节层”分解的增强算法

1、引言 与可见光图像相比,红外热成像捕捉的是物体表面的温度分布,其原始数据(通常为12位或14位)包含了极宽的温度动态范围。然而,人眼能够感知的灰度范围以及显示设备能够展示的灰度级(通常为8位&#xf…

Java-day28-其他流

1. 缓冲流 昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础…

S712001 开放式用户通信

开放式用户通信分类 TIA PORTAL 软件内提供了以下指令: 不带连接管理的通信指令 “TCON ” :建立以太网连接“TDISCON” :断开以太网连接“TSEND” :TCP 和 ISO ON TCP 使用的发送数据“TRCV”: TCP 和 ISO ON TCP 使…

CSMatIO库的安装与C#实现.mat文件生成

一.CSMatIO介绍 CSMatIO 是一个用于读写 MATLAB .mat 文件的开源 C# 库,它提供了简单而高效的 API,使 .NET 应用程序能够与 MATLAB 进行数据交换,支持读取和写入 MATLAB 的 .mat 文件(版本 5 和 7.3),兼容…