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

R调用API时使用jsonlite::read_json出现open.connection连接错误问题

问题原因

HTTP 206 Partial Content 状态码代表服务器返回了资源的部分片段。本次报错有两个核心触发原因:

  1. 目标站点对请求头做了校验,R默认的网络请求UA(用户代理)会被识别为非浏览器请求,触发站点返回分块的部分内容
  2. jsonlite::read_json 底层依赖R基础的open.connection函数,该函数不支持处理206状态的分块响应,会直接判定连接打开失败
解决方案

推荐使用httr包构造标准化HTTP请求,完美兼容各类响应场景,代码示例如下:

# 若未安装httr先执行安装
# install.packages("httr")
library(tidyverse)
library(jsonlite)
library(httr)

api_request <- "https://www.plazavea.com.pe/api/catalog_system/pub/products/search?fq=C:/678/687/&_from=21&_to=41&O=OrderByScoreDESC&"

# 构造带浏览器UA的GET请求,绕过站点校验
resp <- GET(
  url = api_request,
  add_headers(
    `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
  )
)

# 校验请求状态,正常会返回success类状态
http_status(resp)

# 方案1:直接用httr内置方法解析JSON
product_data <- content(resp, as = "parsed")

# 方案2:提取响应文本后用jsonlite解析,符合原有使用习惯
product_data <- fromJSON(content(resp, as = "text"))

备选方案(无需额外依赖httr)

如果不想引入新的依赖包,可以先将接口内容下载到本地再读取:

api_request <- "https://www.plazavea.com.pe/api/catalog_system/pub/products/search?fq=C:/678/687/&_from=21&_to=41&O=OrderByScoreDESC&"
temp_json <- tempfile(fileext = ".json")

# 下载时指定UA和二进制写入模式
download.file(
  url = api_request,
  destfile = temp_json,
  mode = "wb",
  headers = c(`User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
)

# 读取本地JSON文件
product_data <- read_json(temp_json)

# 删除临时文件
unlink(temp_json)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:39:02