Задать вопрос

Почему 300 проксей проверяются так долго?

Написал для console.aws.amazon.com/lambda код , который собирает со страницы сайта free-proxy-list.net бесплатные прокси и делает их проверку на валидность обращением на url https://httpbin.org/ip
Добавил в код для проверки мой личный прокси , который заведомо рабочий! Это для проверки что код работает верно и выдаёт только работающие прокси.
Мой прокси:168.196.238.***:9**0:s***J:w***X (скрыл приват инфу) с авторизацией по логину и паролю.
В коде проверки прокси добавлен таймаут в 5 сек.

Проблема в том что код собирает 300 проксей где-то за 5 секунд и еще где-то он их 140 секунд проверяет, что я считаю очень долго, хотя чек прокси идет асинхронно.
Как ускорить проверку прокси?

Код для amazon lambda:
const https = require('https');
const cheerio = require('cheerio');
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

exports.handler = async (event) => {
    return new Promise((resolve, reject) => {
        https.get('https://free-proxy-list.net/', (response) => {
            let data = '';
            response.on('data', (chunk) => { data += chunk; });
            response.on('end', async () => {
                const $ = cheerio.load(data);
                let proxyList = [];

                // Сначала заполняем список прокси из сайта
                $('table.table-striped.table-bordered').find('tbody tr').each((i, element) => {
                    const ip = $(element).find('td').eq(0).text();
                    const port = $(element).find('td').eq(1).text();
                    proxyList.push(`${ip}:${port}`);
                });

                // Добавляем купленный рабочий прокси в список для проверки
                proxyList.push('168.196.238.***:9**0');

                // Функция для проверки прокси
                async function checkProxy(proxy) {
                    try {
                        let agent;

                        if (proxy === '168.196.238.***:9**0') {
                            // Если это аутентифицированный прокси
                            const proxyAuth = Buffer.from('s***J:w***X').toString('base64');
                            agent = new HttpsProxyAgent({
                                host: proxy.split(':')[0],
                                port: proxy.split(':')[1],
                                protocol: 'https',
                                headers: {
                                    'Proxy-Authorization': `Basic ${proxyAuth}`
                                }
                            });
                        } else {
                            // Для публичных прокси
                            agent = new HttpsProxyAgent(`http://${proxy}`);
                        }

                        await axios.get('https://httpbin.org/ip', { httpsAgent: agent, timeout: 5000 });
                        return proxy;
                    } catch (error) {
                        console.error(`Error with proxy ${proxy}:`, error.message);
                        return null;
                    }
                }

                const checkPromises = proxyList.map(checkProxy);
                const results = await Promise.all(checkPromises);
                const workingProxies = results.filter(proxy => proxy !== null);

                resolve({
                    statusCode: 200,
                    rabo4ie_proxy: workingProxies,
                    neOt4ekanyeProxy: proxyList,
                });
            });
        }).on('error', (e) => {
            reject({
                statusCode: 500,
                body: 'Error: ' + e.message
            });
        });
    });
};
  • Вопрос задан
  • 403 просмотра
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Тебе нужно проанализировать статистику по негативным ответам проверки прокси.
Если большая часть ответов - это socket timeout - то сделай таймаут не 5 секунд а 0.5 секунды.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы