You need to enable JavaScript to run this app. Python requests调用纳斯达克API首次GET请求返回400错误求助
优惠活动
大模型
产品
解决方案
定价
更多

Python requests调用纳斯达克API首次GET请求返回400错误求助

问题原因

  1. 直接触发400错误的原因是请求头命名不符合规范:你定义的cache - control字段中间存在多余空格,HTTP请求头名不允许出现空格,正确写法为Cache-Control,修正后即可解决「无效请求头名称」的报错。
  2. 你观察到的浏览器访问后代码可正常运行的现象确实和Cookie校验相关:纳斯达克官方接口配置了基础反爬策略,首次访问接口时服务器会下发会话Cookie用于身份校验,浏览器访问时会自动完成Cookie存储、后续请求自动携带的逻辑,而你原有代码每次发起的都是独立无状态请求,不会自动保存Cookie,所以首次请求会被拦截;浏览器访问后同IP下的会话会被临时放行,短时间内代码就能正常请求成功。

修正后可直接运行的代码

import requests

# 初始化会话,自动管理Cookie,无需手动处理
session = requests.Session()
symbol = 'ALB'
url = f"https://api.nasdaq.com/api/quote/{symbol}/historical?assetclass=stocks&fromdate=2021-07-06&todate=2021-07-07"
headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "en-US,en;q=0.9",
    "Connection": "keep-alive",
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    # 修正错误的头名,删除多余空格
    "Cache-Control": "max-age=0, no-cache, no-store",
    "upgrade-insecure-requests": "1",
    # 补充来源页头,适配反爬校验规则
    "Referer": "https://www.nasdaq.com/"
}
# 使用会话发起请求,自动携带服务器下发的Cookie
response = session.get(url, headers=headers, verify=True)
if response.status_code != 200:
    print(f"download response code:{response.status_code}")
    print(f"download response text:{response.text}")
else:
    print(response.text)

如果需要批量请求不同的股票代码,复用同一个session实例即可,不需要每次新建会话,就能避免更换symbol后需要重新验证的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 13:18:03