天天看點

python requests session_python requests.request 和session.request差別究竟在哪裡

def request(method, url, **kwargs):

"""Constructs and sends a :class:`Request `.

:return: :class:`Response ` object

:rtype: requests.Response

Usage::

>>> import requests

>>> req = requests.request('GET', 'https://httpbin.org/get')

"""

# By using the 'with' statement we are sure the session is closed, thus we

# avoid leaving sockets open which can trigger a ResourceWarning in some

# cases, and look like a memory leak in others.

with sessions.Session() as session:

return session.request(method=method, url=url, **kwargs)

request.request 源碼有一段這樣的解釋使用了with上下文管理,來確定session被關閉,是以我們可以避免殘留socket打開的連接配接導緻的觸發資源緊張警告在某些情況下,并且還可以防止記憶體洩漏在另一方面。

再session.request

python requests session_python requests.request 和session.request差別究竟在哪裡

在最下面還為我們封裝了一層session執行個體對象,但是它在不久的将來會過期,做了一個上下文管理器作用:

python requests session_python requests.request 和session.request差別究竟在哪裡

是以你可以通過兩種方法區調用request庫的session:

import requests

#method1

new_session=requests.session()

new_session.request()

# method2

from requests import Session

Session().request()

可以從源碼對比request.request是基于上下文管理器做的自動關閉session,而session.request基于http長連接配接sokcet,保留曆史請求的狀态,這就對依賴于登陸狀态的二次請求提供了很便利的途徑,居于token,可以借助python reflect也就是反射實作token讀取,共享

技術群:

python requests session_python requests.request 和session.request差別究竟在哪裡