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
英文地址,請注明出處:http://en.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),兼容…