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

如何在R的POST命令中传递拼接字符对象?Zyte调用报400错误

解决Zyte API调用400错误的问题

问题根源

你手动拼接JSON请求体时犯了两个关键错误:

  • 变量link.vec[i]对应的URL没有被双引号包裹,不符合JSON字符串的格式规范
  • 给整个JSON内容套了外层单引号,导致请求体变成无效的JSON结构,被Zyte API拒绝

修复方案

推荐方案:用jsonlite生成合法JSON(彻底避免手动拼接出错)

直接构造R列表再转成JSON,自动处理引号、转义等格式问题,是最稳妥的方式:

library(httr)
library(jsonlite)

headers = c(
  `Content-Type` = "application/json"
)

# 构造请求体的列表结构
request_body <- list(
  url = link.vec[i]
)

# 转成合法的JSON字符串(auto_unbox确保单值不被转成数组)
data <- toJSON(request_body, auto_unbox = TRUE)

list_html.list[[i]] <- httr::POST(
  url = "https://api.zyte.com/v1/extract",
  httr::add_headers(.headers=headers),
  body = data,
  httr::authenticate("SPM-KEY", "")
)

手动拼接的正确写法(不推荐,易出错)

如果一定要手动拼接,必须确保URL被双引号包裹,且不要加外层单引号:

headers = c(
  `Content-Type` = "application/json"
)

# 给URL加上双引号后再拼接JSON结构
data = paste0('{ 
 "url": "', link.vec[i], '"
  }')
  
list_html.list[[i]] <- httr::POST(
  url = "https://api.zyte.com/v1/extract",
  httr::add_headers(.headers=headers),
  body = data,
  httr::authenticate("SPM-KEY", "")
)

验证方法

打印data查看内容,确保和curl转换器生成的可用格式完全一致:

cat(data)
# 正确输出示例:
# {"url":"https://denver.craigslist.org/search/cta?bundleDuplicates=1&min_price=1000&postal=80003&purveyor=owner&search_distance=100#search=1~gallery~29~0"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:12:44