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

如何用httr2的req_perform_iterative实现基于Next URL的API分页?

使用httr2的req_perform_iterative处理Next URL分页API(以Rick and Morty API为例)

Rick and Morty API采用Next URL分页机制:每一页响应的info字段中包含next字段,值为下一页的请求URL;当没有更多数据时,next会返回null。以下是完整的实现方案:

核心:编写next_req函数

next_req是req_perform_iterative的关键参数,它需要接收当前请求的响应,提取下一页URL并构建新的请求对象;如果没有下一页,则返回NULL终止迭代。

library(httr2)

# 初始化初始请求
initial_req <- request("https://rickandmortyapi.com/api/character")

# 定义next_req函数
next_req <- function(resp) {
  # 解析响应的JSON数据
  resp_data <- resp_body_json(resp)
  # 提取下一页URL
  next_url <- resp_data$info$next
  
  if (!is.null(next_url)) {
    # 基于初始请求修改URL(复用请求配置,如headers)
    req_url(initial_req, next_url)
  } else {
    # 无下一页,返回NULL终止迭代
    NULL
  }
}

执行迭代请求

调用req_perform_iterative执行多页请求,可选设置max_iter避免无限循环:

# 执行迭代请求,最多获取10页数据
page_responses <- req_perform_iterative(
  req = initial_req,
  next_req = next_req,
  max_iter = 10
)

# 提取并合并所有页的角色数据
all_characters <- lapply(page_responses, function(page_resp) {
  resp_body_json(page_resp)$results
})
all_characters <- do.call(c, all_characters)

关键说明

  • 若目标API的下一页URL存储在响应的其他位置,只需修改resp_data$info$next的路径即可适配
  • 如果不需要复用初始请求的配置(如自定义headers),也可以直接用request(next_url)创建新请求
  • max_iter参数建议必加,防止因API返回异常的next值导致无限迭代

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:57:11