python requests.request 和session.request區別究竟在哪里


def request(method, url, **kwargs):
    """Constructs and sends a :class:`Request <Request>`.

    :return: :class:`Response <Response>` object
    :rtype: requests.Response

    Usage::

      >>> import requests
      >>> req = requests.request('GET', 'https://httpbin.org/get')
      <Response [200]>
    """

    # 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

 

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

 

 所以你可以通過兩種方法區調用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讀取,共享

 技術群:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM