如何解决R中从证书过期的USCMP公开JSON API导入数据的问题?
解决R中导入USCMP API数据的SSL证书过期问题
问题分析
目标网站SSL证书已过期,且HTTP请求会被强制重定向到HTTPS,触发默认SSL验证拦截。Windows系统下的schannel SSL后端对证书过期限制更严格,仅关闭ssl_verifypeer和ssl_verifyhost不足以绕过验证。
可行解决方案
方案1:配置完整的SSL验证关闭选项
使用httr库添加ssl_verifystatus = FALSE参数,彻底关闭SSL相关验证:
library(httr) library(jsonlite) # 目标数据的HTTPS地址(HTTP会被重定向到HTTPS) target_url <- "https://clustermapping.us/data/region/county/48321" # 发送请求,关闭所有SSL验证项 response <- GET( target_url, config = list( ssl_verifypeer = FALSE, ssl_verifyhost = FALSE, ssl_verifystatus = FALSE ) ) # 验证请求成功后解析数据 if (http_status(response)$category == "Success") { raw_json <- content(response, "text") # 处理原数据可能的JSON格式问题(修复未包裹为数组的结构) formatted_json <- sprintf('[%s]', gsub('}{', '},{', raw_json, fixed = TRUE)) result_data <- fromJSON(formatted_json) # 查看数据结构 str(result_data) } else { stop("请求失败:", http_status(response)$message) }
方案2:切换到OpenSSL后端(若方案1无效)
Windows系统默认使用schannel,部分情况下需强制curl使用OpenSSL后端:
# 设置环境变量切换SSL后端 Sys.setenv(CURL_SSL_BACKEND = "openssl") # 再次运行方案1中的请求代码
注意事项
- 关闭SSL验证会降低请求安全性,仅在确认目标网站可信的情况下使用。
- 若后续网站更新了SSL证书,建议恢复默认的SSL验证配置。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

