我开发了一个从纳斯达克 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];
// Using this dynamic URL typically
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`;
// This is an example URL with valid parameters (works in 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);
}
}
谢谢!
由于某种原因,API 似乎需要一些标头。我不太确定 axios 是如何工作的,但这里有一个使用 node-fetch 的工作示例(您也可以在 Node 18+ 中使用常规 fetch())。
const fetch = require('node-fetch');
const res = await fetch(url2, {
headers: {
"accept-language": "*",
"user-agent": "node", // you may want to change this
},
});