R调用CoinMarketCap API拉取加密货币数据401报错求助
问题排查结论
你遇到的报错由两个问题共同导致:
- 环境变量取值失败
从返回的请求URL可以看到,两个密钥相关参数的值均为空,说明Sys.getenv("MyKey")未取到有效值。你可以先在R控制台运行print(Sys.getenv("MyKey"))验证,若输出为空,说明系统环境变量中没有配置名为MyKey的变量,或是配置后未重启R会话导致未生效。测试阶段也可以直接将密钥字符串赋值给key_api验证逻辑是否通顺。 - 请求参数不符合接口规则
CoinMarketCap API要求密钥仅可通过两种方式传递,你当前的写法混用了传递方式还写错了参数名:- 官方推荐方式:放在请求头
X-CMC_PRO_API_KEY字段中 - 可选方式:放在URL查询参数
CMC_PRO_API_KEY中,不是你代码里写的apikey
同时你拼接endpoint时已经在路径里加了空的CMC_PRO_API_KEY参数,后面query又重复传参,进一步导致参数混乱。
- 官方推荐方式:放在请求头
修正后可运行代码
rm(list = ls()) cat("\014") library(httr) library(jsonlite) library(tidyverse) base_url <- "https://pro-api.coinmarketcap.com/" path <- "v1/cryptocurrency/listings/latest" key_api <- Sys.getenv("MyKey") # 提前校验密钥是否正常获取 if (nchar(key_api) == 0) { stop("未获取到有效API密钥,请检查环境变量MyKey配置") } res_api <- GET( url = paste0(base_url, path), # 通过请求头传递密钥,避免密钥出现在访问日志中 add_headers(`X-CMC_PRO_API_KEY` = key_api), query = list( start = 1, limit = 5000, convert = "USD", details = "true" ) ) # 查看请求结果 http_status(res_api) parsed_res <- content(res_api, as = "parsed") print(parsed_res$status)
内容的提问来源于stack exchange,提问作者fsbmat。
相关产品推荐
相关产品推荐

