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读取,共享
技术群: