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

R语言使用httr::GET请求NSE期权链接口无输出无响应问题求助

问题核心原因

  • 代码里硬编码的Cookie是站点临时生成的,存在有效期,过期后请求会被NSE的反爬机制拦截,导致请求无响应一直挂起
  • 请求头中添加了method、path、scheme这类冗余字段,httr发送请求时会自动生成这些参数,人工添加错误值反而会导致请求异常
  • 没有配置超时规则,请求被拦截后会无限等待没有输出

可行解决方案

方案1:手动处理会话实现爬取

先请求NSE首页获取有效会话Cookie,再携带有效Cookie请求期权链API,同时添加超时配置避免无限挂起,示例代码如下:

library(httr)
library(jsonlite)

# 第一步:创建会话,请求首页获取有效Cookie
nse_session <- session("https://www.nseindia.com/option-chain", 
                       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",
                         `Accept-Language` = "en-US,en;q=0.9"
                       ),
                       timeout(10))

# 第二步:携带会话Cookie请求期权链API
res <- GET(url = "https://www.nseindia.com/api/option-chain-indices",
           query = list(symbol = "NIFTY"),
           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",
             `Accept` = "*/*",
             `X-Requested-With` = "XMLHttpRequest"
           ),
           timeout(10),
           set_cookies(.cookies = cookies(nse_session)$value))

# 解析返回结果
if (status_code(res) == 200) {
  option_data <- fromJSON(content(res, "text"))
  # 后续自行处理option_data中的期权表数据
  print("数据获取成功")
} else {
  print(paste0("请求失败,状态码:", status_code(res)))
}

方案2:使用封装好的专用包

R生态中有专门对接NSE数据的nser包,已经内置处理了反爬逻辑,直接调用对应函数即可获取期权链数据:

# 首次使用先安装包
# install.packages("nser")
library(nser)

# 直接获取NIFTY期权链数据
nifty_oc <- option_chain("NIFTY")

注意事项

  • 不要频繁发起请求,建议间隔10秒以上,避免被NSE封IP
  • User-Agent可以根据自己的浏览器版本更新,降低被识别为爬虫的概率

内容的提问来源于stack exchange,提问作者Nad Pat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:15:02