尝试在 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-support
和 tough-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))
我正在尝试使用 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-support
和 tough-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))