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

使用Python Requests请求NSEIndia数据时遇403访问拒绝问题求助

解决NSEIndia历史衍生品数据下载403访问拒绝问题

问题原因

NSEIndia服务器存在反爬机制,仅设置User-Agent不足以通过验证,具体原因包括:

  • 缺少关键请求头:手动访问时浏览器会自动携带Referer、Accept、Accept-Language等头信息,这些是服务器验证请求合法性的必要条件。
  • 会话上下文不匹配:你代码中第一个搜索请求的日期是02-07-2011,但下载的是8月(AUG)的文件,日期不匹配导致服务器判定会话无效。
  • Cookie验证缺失:服务器会通过Cookie识别合法会话,仅用Session但未先访问归档页面,无法获取有效Cookie。

修正后的代码

import requests

# 模拟浏览器完整请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0',
    'Referer': 'https://www1.nseindia.com/products/content/derivatives/equities/archieve_fo.htm',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5'
}

session = requests.Session()

# 先访问归档页面,初始化会话并获取合法Cookie
session.get('https://www1.nseindia.com/products/content/derivatives/equities/archieve_fo.htm', headers=headers)
# 搜索请求的日期与下载文件日期保持一致(02-08-2011对应8月文件)
session.get('https://www1.nseindia.com/ArchieveSearch?h_filetype=fobhav&date=02-08-2011&section=FO', headers=headers)
# 发起下载请求
r = session.get('https://www1.nseindia.com/content/historical/DERIVATIVES/2011/AUG/fo02AUG2011bhav.csv.zip', headers=headers)

print(r.status_code)
# 状态码为200时保存文件
if r.status_code == 200:
    with open('fo02AUG2011bhav.csv.zip', 'wb') as f:
        f.write(r.content)

关键说明

  • 补充完整请求头:Referer用于证明请求来自NSE的归档页面,Accept和Accept-Language模拟浏览器的内容接受偏好,让服务器识别为合法访问。
  • 保持日期一致性:搜索请求的日期必须与下载文件的日期对应,确保会话上下文有效。
  • 会话初始化:先访问归档页面,让服务器生成并返回合法Cookie,后续请求通过Session自动携带这些Cookie。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:01:57