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

如何在Python的POST请求中利用cursor实现next分页?

解决方案

你的核心问题是找错了分页标识的位置,并且参数传递逻辑不符合Rapid7 API的要求。根据返回的JSON结构,分页信息存在links数组中,rel="next"的链接里包含cursor参数,按以下步骤修改代码:

1. 提取下一页的cursor值

用Python内置的urllib.parse模块解析next链接的URL,可靠提取cursor参数,避免手动拆分字符串出错。

2. 修正循环逻辑

初始请求后先检查是否存在下一页链接,循环中每次用新的cursor构造请求,直到没有next链接为止。

3. 对齐请求参数格式

确保下一页请求的参数结构和初始请求一致(比如如果初始请求参数是包裹在data字段的JSON字符串,就保持相同格式)。

修改后的完整代码

import requests
import json
from urllib.parse import urlparse, parse_qs

def main_request(headers, url1, initial_params):
    # 发送初始请求
    response = requests.post(url1, headers=headers, json=initial_params, verify=False)
    json_data = response.json()

    # 处理当前页数据(替换成你的业务逻辑,比如保存数据)
    print("处理初始页数据:", json_data.get("data", []))

    # 检查是否有下一页
    has_next = False
    next_cursor = None
    for link in json_data.get("links", []):
        if link.get("rel") == "next":
            has_next = True
            # 解析URL中的cursor参数
            parsed_url = urlparse(link["href"])
            query_params = parse_qs(parsed_url.query)
            next_cursor = query_params.get("cursor", [None])[0]
            break

    # 循环请求下一页
    while has_next:
        # 构造下一页请求参数,保留原有的limit参数并加入cursor
        next_data = {
            "limit_count": 500,
            "limit_size": 10000,
            "cursor": next_cursor
        }
        # 如果初始请求的参数是包裹在data字段中的JSON字符串,就用下面这行替换上面的next_data
        # next_params = {"data": json.dumps(next_data, separators=(",", ":"))}
        
        # 发送下一页请求
        next_response = requests.post(url1, headers=headers, json=next_data, verify=False)
        next_json = next_response.json()

        # 处理当前页数据
        print("处理下一页数据:", next_json.get("data", []))

        # 检查是否还有下一页
        has_next = False
        next_cursor = None
        for link in next_json.get("links", []):
            if link.get("rel") == "next":
                has_next = True
                parsed_url = urlparse(link["href"])
                query_params = parse_qs(parsed_url.query)
                next_cursor = query_params.get("cursor", [None])[0]
                break

    print("所有分页请求完成")

关键注意事项

  • 参数格式适配:如果你的初始请求是用{"data": json.dumps(...)}这种格式传递参数,一定要把下一页的参数也包裹在data字段里,注释里已经给出示例。
  • 异常处理:实际使用时建议添加请求异常捕获(比如try-except),避免网络问题导致程序崩溃。
  • 数据处理:把代码中的打印数据逻辑替换成你实际的业务需求(比如写入文件、存入数据库等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:15:30