You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中无法下载NSE Bhavcopy压缩文件,HTTP状态码403 Forbidden

解决R中自动下载NSE印度衍生品历史Bhavcopy文件的问题

我帮你搞定这个问题!之前用download.file、RCurl这类工具失败,核心原因是NSE的服务器会验证请求的**用户代理(User-Agent)**信息——默认的R下载工具使用的标识会被服务器拒绝。而且其实我们不用模拟网页上的下拉选择操作,直接构造目标文件的URL就能高效下载,下面给你具体的解决方案:

方法一:使用httr包(推荐,请求头配置更灵活)

httr包能方便地设置请求头,模拟浏览器的请求行为,绕过服务器的拦截:

  1. 先安装并加载httr包
  2. 按照NSE的文件命名规律构造目标URL
  3. 设置模拟浏览器的User-Agent请求头
  4. 发送请求并保存文件
# 安装并加载httr包(如果未安装的话)
if (!require(httr)) {
  install.packages("httr")
  library(httr)
}

# 构造目标文件的URL:NSE的Bhavcopy文件名有固定规律,格式为fo+ddMONYYYY+bhav.csv.zip(MON是大写月份缩写)
target_url <- "https://archives.nseindia.com/content/derivatives/fo07JAN2009bhav.csv.zip"

# 设置请求头,模拟Chrome浏览器的User-Agent(你也可以换成其他浏览器的UA)
browser_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"
)

# 发送GET请求并将文件保存到本地
response <- GET(target_url, browser_headers)
writeBin(content(response, "raw"), "fo07JAN2009bhav.csv.zip")

方法二:调整download.file的参数

如果不想用额外的包,也可以给download.file加上请求头参数,不过需要确保使用libcurl作为下载方法:

# 设置下载方法为libcurl,支持自定义请求头
options(download.file.method = "libcurl")

download.file(
  url = "https://archives.nseindia.com/content/derivatives/fo07JAN2009bhav.csv.zip",
  destfile = "fo07JAN2009bhav.csv.zip",
  # 添加模拟浏览器的User-Agent
  headers = c("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")
)

额外提示

  • 文件名规律:NSE的衍生品Bhavcopy文件名格式是fo[dd][MON][YYYY]bhav.csv.zip,其中MON是大写的英文月份缩写(比如JAN、FEB、MAR),你可以根据这个规律写个函数批量生成不同日期的URL,实现批量下载
  • 注意服务器可能有请求频率限制,批量下载时记得加上适当的延迟(比如用Sys.sleep(2)),避免被封禁IP

内容的提问来源于stack exchange,提问作者Nikhil Vidhani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:21:40