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升级到最新稳定版。
关键排查动作
- 打印完整错误栈,确认是真超时还是API拒绝请求后未被正确捕获。
- 用抓包工具对比axios请求和浏览器请求的差异,重点检查请求头、Cookie等字段。
内容的提问来源于stack exchange,提问作者Dor Birendorf
相关产品推荐
相关产品推荐

