Я пытаюсь получить следующий URL-адрес с помощью Axios на NodeJS: https://chromewebstore.google.com/detail/bleabhffpgoeopcfeapggnbdlhklbajk
При этом с помощью Axios я получаю ERR_FR_TOO_MANY_REDIRECTS. При внимательном рассмотрении ошибки мне кажется, что она, возможно, связана с неправильной кодировкой перенаправленного URL-адреса, поскольку в конечном итоге это должно привести к https://chromewebstore.google.com/detail/%E5%85%AD% E7%9C%81%E5%8F%91%E6%96%87/bleabhffpgoeopcfeapggnbdlhklbajk (с китайскими символами, если они вводятся в браузере).
Я пробовал много чего, включая использование перехватчиков Axios для перекодирования URL-адреса, но ничего не помогло.
На удивление, все работает при использовании запросов Curl (curl -L https://chromewebstore.google.com/detail/bleabhffpgoeopcfeapggnbdlhklbajk) или запросов Python (requests.get(' https://chromewebstore.google.com/detail) /bleabhffpgoeopcfeapggnbdlhklbajk').
Вот код, который я использовал, где я пытался закодировать URL-адрес перенаправления, чтобы попытаться каким-то образом разрешить его (очевидно, что более простая версия тоже не работает):
const axiosInstance = axios.create({
maxRedirects: 5,
responseType: 'arraybuffer'
});
try {
const response = await axiosInstance.get('https://chromewebstore.google.com/detail/bleabhffpgoeopcfeapggnbdlhklbajk', {
headers: {
'User-Agent': userAgent,
'Content-Type': 'text/html; charset=UTF-8',
'Accept-Language': 'en-US,en;q=0.5'
}
});
return response.data;
} catch (error) {
if (error.response && error.response.status === 302) {
const location = error.response.headers.location;
console.info('Original redirect URL:', location);
// Split the URL into its components
const urlParts = location.split('/');
// Find the index of the "detail" part
const detailIndex = urlParts.findIndex(part => part === 'detail');
if (detailIndex !== -1 && detailIndex + 1 < urlParts.length) {
// Encode the part after "detail"
urlParts[detailIndex + 1] = encodeURIComponent(urlParts[detailIndex + 1]);
// Join the URL parts back together
const modifiedLocation = urlParts.join('/');
console.info('Modified redirect URL:', modifiedLocation);
// Send a new request with the modified URL
const response = await axiosInstance.get(modifiedLocation, {
headers: {
'User-Agent': userAgent,
'Accept-Charset': 'UTF-8',
'Content-Type': 'text/html; charset=UTF-8'
}
});
return response.data;
} else {
throw new Error('Invalid URL format');
}
} else {
throw error;
}
}
}
Есть идеи?
Заранее спасибо!





Это была ошибка в реализации undici fetch, которая была исправлена с помощью https://github.com/nodejs/undici/pull/2971.
В новейшей версии Node.js, v22.0.0, эта ошибка больше не возникает.
>node
Welcome to Node.js v22.0.0.
Type ".help" for more information.
> (await fetch('https://chromewebstore.google.com/detail/bleabhffpgoeopcfeapggnbdlhklbajk')).url
'https://chromewebstore.google.com/detail/%E5%85%AD%E7%9C%81%E5%8F%91%E6%96%87/bleabhffpgoeopcfeapggnbdlhklbajk'
Обновление узла помогло. Спасибо
То же самое для выборки узла. Не происходит при обычной выборке.