You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

R语言read.delim读取URL文件报403 Forbidden错误的解决求助

R语言read.delim访问Dryad数据报403 Forbidden的原因与解决方法

问题原因

  • Dryad反爬机制更新:R基础函数read.delim默认不会携带浏览器标识(User-Agent),服务器会把这种请求判定为非人工访问,直接返回403禁止访问状态码,这是今年新增的限制规则。
  • 临时链接失效:你使用的file_stream/55707属于临时生成的下载链接,Dryad可能调整了文件的访问路由,这类临时链接已不再有效;而浏览器访问的是数据集主页面,走的是平台合法访问流程,所以能正常打开。

解决方法

方法1:给请求添加浏览器标识

借助httr包模拟浏览器请求,绕过反爬限制:

# 先安装httr包(如果未安装)
install.packages("httr")
library(httr)

# 发送带User-Agent的请求
resp <- GET("https://datadryad.org/stash/downloads/file_stream/55707",
            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"))

# 读取数据
if (status_code(resp) == 200) {
  d <- read.delim(text = content(resp, as = "text"))
} else {
  stop("请求失败,状态码:", status_code(resp))
}

方法2:使用永久DOI下载链接

从数据集主页面找到对应文件的永久DOI(注意不是数据集的主DOI),替换成https://datadryad.org/stash/downloads/doi/[文件DOI]的格式,这类链接不会轻易失效,适合长期教学使用。

方法3:手动下载后本地读取

如果不想折腾代码,直接在浏览器打开数据集页面下载文件,然后用本地路径读取:

d <- read.delim("~/Downloads/你的文件名.txt")

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

火山引擎 最新活动