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

浏览器可正常访问NSE网站但Python requests请求返回401错误

问题成因
  • NSE(印度国家证券交易所)官网配置了多层反爬校验规则,仅携带User-Agent的无状态裸请求会被直接拦截:
    • 所有API接口请求必须携带首次访问官网主页时服务端下发的合法Cookie(核心校验字段为nseappid),跳过前置访问步骤直接请求API,服务端会判定请求非法,返回401状态码与Resource not found页面
    • 仅配置单个User-Agent字段不符合真实浏览器的请求特征,真实浏览器发起请求时会携带Accept、Referer等标准头字段,缺失这些字段会被反爬规则直接识别为爬虫流量
    • 低版本requests库的TLS握手指纹和真实Chrome浏览器存在差异,即使请求头、Cookie配置正确,也可能被校验规则拦截
解决方法
  • 使用requests.Session()创建会话对象,自动维护请求过程中产生的Cookie,不要直接调用无状态的requests.get()发起请求
  • 补全真实浏览器会携带的基础请求头,至少要包含Referer(指向NSE站内对应页面)、Accept字段,不要只传User-Agent
  • 严格按照浏览器真实访问路径发起请求:先访问NSE主页获取合法Cookie,再请求目标API接口
  • 如果上述操作后仍被拦截,可以升级requests、urllib3到最新版本,或替换为curl_cffi库模拟真实Chrome的TLS指纹绕过校验

可运行参考代码

import requests

# 初始化会话,自动维护Cookie
session = requests.Session()
# 配置和真实浏览器一致的请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Referer': 'https://www.nseindia.com/market-data/top-gainers-loosers'
}
# 先访问主页,获取服务端下发的合法Cookie
session.get('https://www.nseindia.com', headers=headers, timeout=10)
# 再请求目标API接口
api_url = 'https://www.nseindia.com/api/live-analysis-variations?index=gainers&type=NIFTY'
response = session.get(api_url, headers=headers, timeout=10)
print(response.status_code)
# 接口返回JSON格式数据,可直接解析使用
print(response.json())

注意:请求时控制访问频率,高频请求会触发IP临时封禁规则,建议相邻请求间隔不短于2秒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:37:29