You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests首次请求返回已存数据时如何在同一会话发起二次请求

答案

完全可以在现有with requests.Session()上下文内发起二次请求,不过你现有代码有个需要修正的小问题:你已经创建了Session实例api,但发请求时调用的是顶级的requests.post(),等于完全没用到Session的连接复用、cookie自动携带等特性,属于不必要的资源浪费。

requests.Session的上下文管理器的作用仅为:在with代码块执行结束后自动关闭会话、释放底层连接资源。只要你的二次请求逻辑仍然写在with块的作用范围内,就可以用同一个Session实例发起任意多次请求,哪怕目标URL、请求方法和第一次完全不同也不受影响。

你可以参考如下调整后的代码逻辑:

import requests
from requests.exceptions import HTTPError
from rest_framework import status
from rest_framework.response import Response

with requests.Session() as api:
    # 第一次请求改用api.post调用,复用Session能力
    try:
        # 直接传json参数会自动帮你做序列化和设置Content-Type,不用手动dumps
        user = api.post(URL, json=post_obj, headers=headers)
        user.raise_for_status()
    except HTTPError as e:
        return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
    
    # 此处写你存数据库、判断数据是否已存在的逻辑
    data_existed = check_data_exists_in_db(user.json())
    if data_existed:
        # 同一会话内直接发起第二次请求即可
        try:
            second_resp = api.post(ANOTHER_URL, json=second_post_obj, headers=headers)
            second_resp.raise_for_status()
        except HTTPError as e:
            return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)

额外补充:同一个Session实例发起的多次请求会自动共享cookie、复用TCP连接,相比每次用requests顶级方法发请求能降低请求延迟,也更符合Session的设计初衷。

内容的提问来源于stack exchange,提问作者lr_optim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:51:03