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

axios调用NASDAQ API超时:Postman/浏览器正常但代码失效求助

问题描述

我开发的从NASDAQ API获取股票数据的脚本近期突然失效,axios.get调用持续返回超时错误,但用Postman或浏览器直接发起相同GET请求却能正常拿到结果。相关代码片段如下:

export const getOptionQuote = async (ticker, maxExpDate, maxStrikePrice, Optiontype) => {
    try {
        const today = new Date(Date.now());
        const todayStr = today.toISOString().split('T')[0];

        // 动态生成的URL(原本用这个)
        const url = `https://api.nasdaq.com/api/quote/${ticker}/option-chain?assetclass=stocks&fromdate=${todayStr}&todate=${maxExpDate}&excode=oprac&callput=${Optiontype}&money=out&type=all`;

        // 测试用的固定参数URL(Postman中能正常运行)
        const url2 = 'https://api.nasdaq.com/api/quote/GOOG/option-chain?assetclass=stocks&fromdate=2023-10-19&todate=2023-12-03&excode=oprac&callput=put&money=out&type=all';

        const res = await axios.get(url2);
        console.log(res);

        const rows = res.data?.data?.table?.rows || [];
        const currentPrice = parseFloat(res.data?.data?.lastTrade.split('$')[1].split('(')[0].trim());
        console.log('Got quotes');

        return [rows, currentPrice];
    } catch (e) {
        console.log(e);
    }
}
可能的解决方法
  • 模拟浏览器请求头:NASDAQ API可能对请求来源做了验证,axios默认请求头和浏览器/Postman差异较大。添加浏览器风格的请求头:
    const 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': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
      'Accept-Language': 'en-US,en;q=0.5',
      'Connection': 'keep-alive'
    };
    
    const res = await axios.get(url2, { headers });
    
  • 延长超时时间:axios默认超时阈值较短,若API响应变慢会触发超时。调整超时设置:
    const res = await axios.get(url2, {
      headers,
      timeout: 10000 // 设置为10秒超时
    });
    
  • 排查网络/代理限制:脚本运行环境可能存在代理拦截,或IP被NASDAQ临时封禁。尝试切换网络环境,或配置axios代理:
    const res = await axios.get(url2, {
      headers,
      proxy: {
        host: '你的代理地址',
        port: 你的代理端口
      }
    });
    
  • 添加请求重试机制:偶尔超时可能是网络波动导致,用axios-retry插件实现自动重试:
    先安装依赖:npm install axios-retry
    再修改代码:
    import axiosRetry from 'axios-retry';
    
    // 初始化重试配置:最多重试3次,间隔指数递增
    axiosRetry(axios, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
    
    const res = await axios.get(url2, { headers });
    
  • 验证动态参数格式:确保maxExpDate等动态参数的格式和测试URL完全一致,避免参数错误导致API无响应。
  • 升级axios版本:旧版本axios可能存在兼容性问题,执行npm update axios升级到最新稳定版。
关键排查动作
  1. 打印完整错误栈,确认是真超时还是API拒绝请求后未被正确捕获。
  2. 用抓包工具对比axios请求和浏览器请求的差异,重点检查请求头、Cookie等字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:53:15