尝试在 NodeJS 中使用 AXIOS 访问 API 时发生未经授权的错误

Unauthorized error when trying to access an API using AXIOS in NodeJS

我正在尝试使用 NodeJS 中的 AXIOS 模块访问免费 API 数据。下面是相同的代码示例,它给出 HTTP 401 status code - unauthorized 错误。

代码示例:

const axios = require('axios');

const axiosCookieJarSupport = require('axios-cookiejar-support').default;
axiosCookieJarSupport(axios);

const URL = `https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY`;

const getData = async (url) => {
    console.log(`Get Data : `);

    try {
      const response = await axios.get(url, {withCredentials: true});
      console.log(response);
    } catch (error) {
      console.error(error);
    }
}

getData(URL);

我确实尝试使用 tough-cookie npm 模块,但每次都以同样的错误结束。

const axios = require('axios');

const axiosCookieJarSupport = require('axios-cookiejar-support').default;
axiosCookieJarSupport(axios);

const tough = require('tough-cookie'); 
const cookieJar = new tough.CookieJar();

const URL = `https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY`;

const getData = async (url) => {
    console.log(`Get Data : `);

    try {
      const response = await axios.get(url, {withCredentials: true});
      console.log(response);
    } catch (error) {
      console.error(error);
    }
}

getData(URL);



const fetchData = async (url) => {
    const response = await axios.get(url, {
        headers: {
           'accept': '*/*',
           'User-Agent': 'Mozilla/5.0'
        },
        jar: cookieJar,
        withCredentials: true // If true, send cookie stored in jar
    });

    console.log(response);
}

fetchData(URL);

任何帮助将不胜感激,在此先感谢。

您需要手动复制并粘贴 cookie 以请求如下图的第 6 步

之后像这样发送您的请求:

var axios = require("axios");

async function request() {
  var config = {
    method: "get",
    url: "https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY",
    headers: {
      Connection: "keep-alive",
      "Accept-Encoding": "gzip, deflate, br",
      cookie:'paste the cookie',
    },
  };
  try {
    const response = await axios(config);
    console.log(response);
  } catch (error) {
    console.log(error);
  }
}

request();

基于Mohammad Yaser Ahmadi's

API 受 cookie 保护。只有在您访问实际网站时 才可以使用 cookie。 考虑到这些信息,我们可以通过首先对主页进行 axios 调用来自动执行此过程,以便我们可以检索和存储 cookie,然后我们可以向 API.

发出后续请求

Axios 示例:

const axios = require('axios').default;
axios.get('https://www.nseindia.com/')
    .then(res => {
        return axios.get('https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY', {
            headers: {
                cookie: res.headers['set-cookie'] // cookie is returned as a header
            }
        })
    })
    .then(res => console.log(res.data))
    .catch(res => console.error(res.response.data))

使用 axios-cookiejar-supporttough-cookie 的 Axios 示例:

const axios = require('axios').default;
const axiosCookieJarSupport = require('axios-cookiejar-support').default;
const tough = require('tough-cookie');
const instance = axios.create({ withCredentials: true });
axiosCookieJarSupport(instance);
instance.defaults.jar = new tough.CookieJar();

instance.get('https://www.nseindia.com/')
    .then(res => instance.get('https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY'))
    .then(res => console.log(res.data))
    .catch(res => console.error(res.response.data))