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




