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

使用httr2处理Qualtrics API错误失败:响应非JSON格式

解决httr2中Qualtrics API错误响应的通用获取方法

要实现始终获取错误文本且无需关注响应类型,可以通过自定义错误处理逻辑结合httr2内置的字符串解析函数来解决,以下是具体方案:

1. 自定义错误处理,保留响应对象

不要完全关闭错误判断(is_error = \(resp) FALSE),而是自定义错误处理规则:在检测到错误状态码(≥400)时,不直接终止请求,而是保留响应对象并提取错误内容。示例代码:

library(httr2)

# 自定义错误处理函数:捕获错误但返回响应对象
req_custom_error <- function(req) {
  req_error(req, 
            # 仅将状态码≥400的请求标记为错误
            is_error = \(resp) resp_status(resp) >= 400,
            # 自定义错误消息,包含响应内容
            message = \(resp) paste0("API请求错误: ", resp_status(resp), " - ", resp_body_string(resp))
  )
}

# 构建并执行请求
req_get_users <- request("https://fra1.qualtrics.com/API/v3/users") |>
  req_method("POST") |>
  req_oauth_client_credentials(client   = oauth_client(id        = "my_id",
                                                       secret    = "my_secret",
                                                       token_url = "https://fra1.qualtrics.com/oauth2/token"),
                               scope    = "manage:all",
                               token_params = list("grant_type" = "client_credentials")) |>
  req_custom_error() |>
  req_perform()

2. 通用提取错误文本的规范方法

使用httr2提供的resp_body_string()函数替代rawToChar(resp_body_raw()),它会自动处理编码和不同响应类型的转换,无需关心响应是JSON、HTML还是其他文本格式:

# 提取错误文本
error_text <- resp_body_string(req_get_users)

3. 进阶:根据响应类型解析错误内容

如果需要针对不同响应类型做结构化解析,可以先判断内容类型再处理:

parse_error <- function(resp) {
  if (resp_status(resp) >= 400) {
    content_type <- resp_content_type(resp)
    # 优先解析JSON格式错误
    if (grepl("application/json", content_type)) {
      return(resp_body_json(resp))
    } else {
      # 其他类型直接返回文本
      return(resp_body_string(resp))
    }
  }
  return(NULL)
}

# 使用示例
parse_error(req_get_users)

方案优势

  • 相比直接关闭错误检测,自定义is_error逻辑更严谨,不会忽略错误状态
  • resp_body_string()是httr2官方推荐的文本解析方式,比手动处理raw更规范可靠
  • 既满足「返回响应对象」的需求,又能灵活提取完整错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:37:06