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

使用R调用Companies House API遇400错误,请求技术协助

解决Companies House API调用400错误及后续数据框行数不匹配问题

核心问题分析

API返回Status:400属于客户端请求错误,这直接导致后续处理未获取到有效数据,进而触发arguments imply differing number of rows:1,0的报错。以下是针对性排查和解决步骤:

1. 查看API返回的具体错误信息

先获取400错误的详细描述,这是定位问题的关键:

# 在精简函数中添加该行代码查看错误详情
print(httr::content(firmTEST))

常见错误原因包括:API密钥无效、密钥权限不足、请求编码错误等。

2. 确保API密钥正确且权限正常

  • 确认从Companies House开发者页面获取的密钥无复制错误(避免多余空格、换行符)
  • 登录Companies House开发者后台,检查密钥是否处于激活状态,且拥有搜索API的访问权限

3. 优化请求URL的编码方式

手动替换特殊字符容易遗漏,改用R内置的URLencode()函数处理搜索关键词:

search_company <- function (company, mkey) 
{
  firmNAME <- URLencode(company, reserved = TRUE) # 替换手动gsub
  FIRMurl <- paste0("https://api.company-information.service.gov.uk/search/companies?q=",firmNAME)
  # 添加Accept头确保返回JSON格式
  firmTEST <- httr::GET(FIRMurl, 
                        httr::authenticate(mkey, ""),
                        httr::add_headers(Accept = "application/json"))
  # 先检查请求状态
  if(httr::http_status(firmTEST)$category != "Success"){
    stop("API请求失败:", httr::content(firmTEST)$error)
  }
  firmTEXT <- httr::content(firmTEST, as = "text")
  return(firmTEXT)
}

4. 验证密钥认证格式

Companies House API要求用API密钥作为用户名,密码留空,确保httr::authenticate(mkey, "")的参数顺序正确(第一个参数是用户名,第二个是密码),不要搞反。

5. 修复原函数的数据框行数不匹配问题

当API请求失败返回空数据时,原函数会强制构造行数不匹配的数据框,建议在函数中增加请求状态检查,提前终止并抛出明确错误,避免后续模糊报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:30:10