获取请求适用于邮递员/浏览器,但不适用于代码

问题描述 投票:0回答:1

我开发了一个从纳斯达克 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);
    }
}

谢谢!

node.js axios get postman
1个回答
0
投票

由于某种原因,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
    },
  });
© www.soinside.com 2019 - 2024. All rights reserved.