with 是 Python 的上下文管理语法
创建一个 Session 对象,临时赋值给 session;代码块执行结束后,自动关闭这个 Session。
with sessions.Session() as session: return session.request(method=method, url=url, **kwargs)
分开看:
sessions.Session()
创建一个 requests 会话对象,大致等价于:
session = requests.sessions.Session()#requests包的sessions.py模块的Session方法
as session 表示将创建的对象保存到变量 session:
with sessions.Session() as session: response = session.request("GET", url)
with 是 Python 的上下文管理语法。无论代码块正常结束还是发生异常,都会执行清理操作。
因此:
with sessions.Session() as session: response = session.request("GET", url)
大致相当于:
session = sessions.Session() try: response = session.request("GET", url) finally: session.close()
它的主要好处是确保 Session 被关闭:
with sessions.Session() as session:
response = session.get("https://example.com")
离开 with 代码块时:
session.close()
会被自动调用,用于释放 Session 管理的连接适配器等资源。
即使请求发生异常,也能执行关闭操作:
with sessions.Session() as session: raise RuntimeError("请求失败") # Session 依然会被自动关闭
这是通过上下文管理器方法实现的,概简化如下:
class Session:
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
self.close()
执行顺序如下:
sessions.Session()
↓
调用 session.__enter__()
↓
将返回值赋给 session
↓
执行 with 内的代码
↓
调用 session.__exit__()
↓
自动执行 session.close()
在 requests 顶层请求方法中,可以简化理解为:
def request(method, url, **kwargs): with sessions.Session() as session: return session.request(method, url, **kwargs)
所以:
requests.get(url)
大致会创建一个临时 Session,用它发出请求,然后自动关闭 Session。若需要连续发送多个请求,则通常自己创建并复用 Session:
with requests.Session() as session: response1 = session.get(url1) response2 = session.get(url2)
这样多个请求可以复用连接和 Cookie。

浙公网安备 33010602011771号