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

使用requests.get访问URL无响应但火狐浏览器可正常打开如何解决

问题原因
  • NSE印度国家证券交易所的公开API做了多层反爬校验,仅携带User-Agent无法通过校验,服务端会直接拦截请求返回403/超时等异常
  • 浏览器能正常访问是因为浏览器访问时会自动携带主站下发的有效会话Cookie,同时发送完整的Referer、Accept等请求头,符合服务端的校验规则
  • 现有代码还存在响应处理错误:requests返回的response对象不能直接传入pd.read_json,需要先提取响应的JSON内容
修正方案
import requests
import pandas as pd
import pprint

url = "https://www.nseindia.com/api/option-chain-equities?symbol=ACC"
# 补充完整的请求头参数
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": "application/json, text/javascript, */*; q=0.01",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Referer": "https://www.nseindia.com/",
    "X-Requested-With": "XMLHttpRequest"
}

# 用Session保持会话Cookie,先访问主站获取合法Cookie
session = requests.Session()
# 先请求主站触发Cookie下发
session.get("https://www.nseindia.com", headers=headers, timeout=10)
# 再请求目标API
response = session.get(url, headers=headers, timeout=10)
# 先校验状态码
print(response.status_code)
if response.status_code == 200:
    # 先提取JSON数据再转DataFrame
    data = response.json()
    df = pd.json_normalize(data['records']['data'])
    pprint.pprint(df.head(1))

注意事项

  • 如果请求仍然失败,可以更新User-Agent为你本地浏览器的真实UA
  • 需先确认当前网络可以正常访问NSE官网

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:00:06