最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Python如何自定義session認(rèn)證方法

 更新時間:2026年03月10日 09:23:43   作者:溪海莘  
這篇文章主要為大家詳細(xì)介紹了Python如何自定義session認(rèn)證方法以實現(xiàn)會話失效自動重連,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

為什么不使用request而使用session

關(guān)鍵原因在于你所發(fā)送的網(wǎng)絡(luò)請求是否需要"記憶性",如果需要那么使用requests.session模塊。它會自動為開發(fā)者維護在平臺上的認(rèn)證和登錄信息,能夠記錄客戶端和服務(wù)器交互過程中產(chǎn)生的Cokie信息。

我們定義一個AutoAuthSession類對象,它繼承自requests.Session模塊。

為什么需要自定義Session對象

因為平臺的認(rèn)證有一個過期時間限制。為了確保session對象在使用API過程不會失效,我們希望其能自行檢測,并在Cokie失效后自動實現(xiàn)登錄。

session.request 實現(xiàn)了什么

通過查看requests 的源代碼,我們了解到requests.Session 繼承自 SessionRedirectMixin。這個類有6個實例方法。主要實現(xiàn)重定向?qū)?yīng)的功能。

其次,Session繼承SessionRedirectMixin( 實際上遵循Mixin設(shè)計模式,父類提供工具方法 )。Session中定義了request方法,它是一個關(guān)鍵。具體代碼如下:

def request(
        self,
        method,
        url,
        params=None,
        data=None,
        headers=None,
        cookies=None,
        files=None,
        auth=None,
        timeout=None,
        allow_redirects=True,
        proxies=None,
        hooks=None,
        stream=None,
        verify=None,
        cert=None,
        json=None,
    ):
        # Create the Request.
        req = Request(
            method=method.upper(),
            url=url,
            headers=headers,
            files=files,
            data=data or {},
            json=json,
            params=params or {},
            auth=auth,
            cookies=cookies,
            hooks=hooks,
        )
        prep = self.prepare_request(req)

        proxies = proxies or {}

        settings = self.merge_environment_settings(
            prep.url, proxies, stream, verify, cert
        )

        # Send the request.
        send_kwargs = {
            "timeout": timeout,
            "allow_redirects": allow_redirects,
        }
        send_kwargs.update(settings)
        resp = self.send(prep, **send_kwargs)

        return resp
        

封裝 HTTP 請求的全流程:從接收用戶傳入的請求參數(shù),到構(gòu)建、預(yù)處理請求,再到發(fā)送請求并返回響應(yīng),把復(fù)雜的 HTTP 協(xié)議細(xì)節(jié)抽象成簡單的參數(shù)調(diào)用。

  • 把用戶傳入的零散參數(shù)封裝成一個 Request 類實例 - 僅存儲參數(shù)
  • prepare_request 會把原始 Request 轉(zhuǎn)為 “可發(fā)送的 PreparedRequest”
  • 把預(yù)處理好的 PreparedRequest 傳給 send 方法
  • 獲取響應(yīng)結(jié)果 - response

在PreparedRequest方法中實現(xiàn)對cokie 的處理和裝載。而真正處理request請求的底層工作由send實現(xiàn)。

如何實現(xiàn)自動重連功能

我們自定義的對象 AutoAuthSession中實現(xiàn)了auth_request 和request 方法。它們內(nèi)部都實現(xiàn)了對重連功能的封裝。

    def auth_request(
        self,
        method: str | None = None,
        url: str | None = None,
        *args,
        expected: Callable[[Response], bool] | None = None,
        max_tries: int | None = None,
        delay_unexpected: float | None = None,
        log: str | None = None,
        **kwargs,
    ) -> Response:

該方法接收四個參數(shù):expected, max_tries, delay_unexpected, log。這些參數(shù)同時也是AutoAuthSession的新屬性。

下面這段代碼是實現(xiàn)認(rèn)證重連的主要邏輯:

        for tries in range(1, 1 + max_tries):
            resp = super().request(method, url, *args, **kwargs)
            if expected(resp):
                break
            time.sleep(delay_unexpected)
        else:
        		......
        		......

它實際上仍然是調(diào)用了父類Session 的request方法,無非是加入了一個回調(diào)函數(shù) expexted 用來判斷響應(yīng)結(jié)果是否達到預(yù)期,根據(jù)其狀態(tài)決定是否重新發(fā)送請求。同時加入延時邏輯,防止速率過快。

else 后面主要是日志記錄過程。

到此這篇關(guān)于淺析Python如何自定義session認(rèn)證方法的文章就介紹到這了,更多相關(guān)Python自定義session認(rèn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

永康市| 普洱| 丰宁| 满洲里市| 江都市| 大石桥市| 嘉定区| 双鸭山市| 敦化市| 祁门县| 黄龙县| 皋兰县| 尖扎县| 武胜县| 稻城县| 汝阳县| 彭阳县| 北海市| 锦屏县| 福建省| 琼结县| 哈巴河县| 许昌县| 永登县| 鄄城县| 科技| 原阳县| 留坝县| 香格里拉县| 漠河县| 商水县| 阳新县| 砀山县| 墨玉县| 牙克石市| 武冈市| 那曲县| 彭泽县| 宜兴市| 天峨县| 玛曲县|