使用R调用Cameo数据库API返回HTML而非JSON的问题求助
解决建议
1. 添加模拟浏览器的请求头
服务器通常会通过User-Agent字段识别请求来源,httr默认的请求标识可能被判定为非浏览器请求,从而返回HTML页面。可以添加标准浏览器的UA信息来绕过这个限制:
library(httr) library(jsonlite) base_url <- "https://cameo.mfa.org/api.php" query_param <- list(action = "query", pageids = "17051", format = "json", prop = "extracts" ) # 模拟Chrome浏览器的请求头 headers <- add_headers( `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" ) parsed_content <- httr::GET(base_url, query_param, headers) # 先打印返回内容确认格式 cat(content(parsed_content, as = "text", encoding = "UTF-8")) # 确认是JSON后再解析 jsonlite::fromJSON(content(parsed_content, as = "text", encoding = "UTF-8"))
2. 验证请求URL的一致性
打印最终生成的请求URL,和你浏览器中能返回JSON的URL做对比,确保参数没有被错误解析:
# 输出实际请求的完整URL message(parsed_content$url)
如果发现参数缺失或格式错误,调整query_param列表的内容。
3. 检查响应状态码与重定向
先确认请求是否成功:
# 查看HTTP状态码,200表示成功 message(parsed_content$status_code)
如果状态码是403(禁止访问)、302(重定向)等,可查看重定向历史排查问题:
# 输出所有重定向的响应头 parsed_content$all_headers
若存在多次重定向到HTML页面,可能需要手动处理重定向逻辑或补充验证参数。
内容的提问来源于stack exchange,提问作者leparc
相关产品推荐
相关产品推荐

