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

使用Python Requests访问NSE预开盘网站时请求超时问题排查

问题分析与解决

你的请求超时主要是因为NSE印度交易所的服务器会拦截非浏览器发起的请求,代码缺少模拟浏览器的关键请求头,且未设置超时机制。以下是具体问题和修复方案:

1. 错误的请求头设置

你设置的Content-Type: text完全不适用于GET请求(GET请求无请求体),反而会让服务器识别出这不是合法的浏览器请求。需要替换为符合浏览器标准的请求头,比如User-Agent、Accept等。

2. 缺少超时机制

未设置超时参数会导致请求无限等待,添加超时可以避免程序挂起。

3. Cookie管理(可选但推荐)

NSE部分页面需要验证会话Cookie,使用requests.Session()可自动管理Cookie,提升请求成功率。


修复后的代码

import requests

url = 'https://www.nseindia.com/market-data/pre-open-market-cm-and-emerge-market'

# 模拟MacOS Chrome浏览器的请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
}

# 使用Session自动管理Cookie
session = requests.Session()

try:
    # 先请求主页获取必要Cookie
    session.get('https://www.nseindia.com', headers=headers, timeout=10)
    # 发起预开盘页面请求
    response = session.get(url, headers=headers, timeout=10)
    response.raise_for_status()  # 捕获HTTP错误状态码
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"请求出错: {e}")

关键说明

  • User-Agent:必须设置,让服务器认为请求来自真实浏览器。
  • 超时参数:timeout=10表示10秒内无响应则终止请求。
  • Session对象:自动保存和发送Cookie,避免被服务器拦截。
  • 异常处理:捕获超时、HTTP错误等各类请求异常,让程序更健壮。

内容的提问来源于stack exchange,提问作者Dsp guy sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:20:00