使用R调用乌克兰国家银行API自定义请求失败的问题
问题描述
使用R的jsonlite包访问乌克兰国家银行API时,仅官方提供的示例请求能正常返回数据——比如获取2019年8月企业月度调查数据的代码可正常运行:
library("jsonlite") fromJSON("https://bank.gov.ua/NBUStatService/v1/statdirectory/survey?period=m&date=20190801&json")
但所有自定义请求,包括修改日期(如2019年9月)、移除参数、切换其他数据集,均报错或超时。示例失败代码:
library("jsonlite") fromJSON("https://bank.gov.ua/NBUStatService/v1/statdirectory/survey?period=m&date=20190901&json")
排查方案与可能原因
1. 验证数据是否实际存在
直接在浏览器中打开自定义请求的URL(比如https://bank.gov.ua/NBUStatService/v1/statdirectory/survey?period=m&date=20190901&json),查看返回内容:
- 如果显示无数据提示(比如
[]或"no data"),说明该日期的数据集并未被API收录,官方示例仅保留了特定日期的演示数据。 - 如果浏览器也无法加载,说明API本身可能存在服务问题或访问限制。
2. 检查请求参数格式
部分API对参数格式有严格要求,尝试简化日期参数:将date=20190901改为date=201909(仅年月)测试:
fromJSON("https://bank.gov.ua/NBUStatService/v1/statdirectory/survey?period=m&date=201909&json")
3. 模拟浏览器请求绕过访问限制
公共API常对非浏览器请求做限制,用httr包添加请求头模拟浏览器访问,同时查看响应状态码定位问题:
library(httr) library(jsonlite) # 发起带请求头的请求 resp <- GET( url = "https://bank.gov.ua/NBUStatService/v1/statdirectory/survey?period=m&date=20190901&json", add_headers(`User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") ) # 查看响应状态码 cat("响应状态码:", status_code(resp), "\n") # 解析响应内容 if (status_code(resp) == 200) { data <- fromJSON(content(resp, "text")) print(data) } else { cat("错误信息:", content(resp, "text"), "\n") }
状态码200表示请求成功,非200码可结合错误信息判断是参数错误还是API限制。
4. 排查网络与地区限制
部分公共API会限制境外IP访问,或因网络波动导致超时。尝试更换网络环境,或使用代理测试请求是否正常。
总结
如果多个数据集的自定义请求均失败,且浏览器直接访问也无数据返回,大概率是API本身的数据收录限制或访问策略问题,而非你的操作错误。优先通过浏览器验证数据存在性,再调整请求参数和方式。
内容的提问来源于stack exchange,提问作者miles_bytes
相关产品推荐
相关产品推荐

