Получение ошибки HTTP 429 при скрейпинге archive.is (и других сайтов) с AWS. Как правильно настроить сетевой трафик, чтобы он выглядел не как AWS.

Вопрос или проблема

И так, когда я использую curl с экземпляра EC2 или lambda, я получаю ошибку 429 с первой попытки:

% curl -i http://archive.is/timegate/http://www.w3.org/TR/webarch/
HTTP/1.1 429 Слишком много запросов
Date: Wed, 02 Oct 2024 10:24:56 GMT
Server: nginx/1.9.2
Content-Type: text/html
Referrer-Policy: no-referrer
Access-Control-Allow-Origin: *
Content-Length: 26
Connection: keep-alive

Но когда я обращаюсь к этому с локального express.js (или локального SAM lambda), все работает идеально.

Я пытался использовать эластичный IP, но это ничего не дало. Могло бы использование VPC как-то это исправить? Мне кажется, что причина в том, что запросы идут с IP-адресов AWS. И архив.ис, что вполне логично, заблокировал все IP-адреса AWS. Я понимаю, что вся эта мера предназначена для предотвращения работы ботов. Но этот сервис будет только собирать данные по запросу (по взаимодействию с человеком) и в очень ограниченных количествах. Есть ли правильный способ сделать так, чтобы трафик не выглядел как приходящий с AWS? Могу ли я использовать свой домашний/рабочий компьютер для хостинга сервера, который я как-то настрою в API Gateway или VPN, чтобы мой компьютер можно было использовать в качестве сервера для сбора данных? Если вы дадите мне общие направления, я смогу подробнее изучить этот вопрос самостоятельно.

Вот функция (но по сути, она просто обращается к этому URL^):

import axios from 'axios';

type Request = {
  path: string;
  httpMethod: string;
  alias: string;
  input: {
    title: string;
    description: string;
    url: string;
  };
};

const headers = {
  Host: 'archive.is',
  'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:130.0) Gecko/20100101 Firefox/130.0',
  Accept:
    'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8',
  'Accept-Language': 'en-US,en;q=0.5',
  'Accept-Encoding': 'gzip, deflate, br, zstd',
  Referer: 'https://archive.is/',
  Connection: 'keep-alive',
  Cookie:
    'tmr_lvid=8038ff6d405f75358c25363f2977ed47; tmr_lvidTS=1726213036055; domain_sid=cobs71VBpxbYREWytnErI%3A1726818293313; tmr_detect=0%7C1726891432364; _ga=GA1.2.661111166.1726891424',
  'Upgrade-Insecure-Requests': '1',
  'Sec-Fetch-Dest': 'document',
  'Sec-Fetch-Mode': 'navigate',
  'Sec-Fetch-Site': 'same-origin',
  Priority: 'u=0, i',
};

export async function archivedArticle(request: Partial<Request>) {
  if (!request?.input?.url) {
    throw new Error('URL требуется');
  }

  // Тестирование
  const timeGateUrl = `http://archive.is/timegate/${request.input.url}`;
  const timeGateRes = await axios.get(timeGateUrl, {headers});
  console.log(JSON.stringify({ data: timeGateRes.data }));
  return { ...request, timeGateRes };
}

Ответ или решение

Получение ошибки HTTP 429 ("Слишком много запросов") при попытке скрапинга сайта archive.is с использованием ресурсов AWS связано с тем, что IP-адреса, предоставляемые AWS, часто попадают в черные списки на таких сайтах, подобных archive.is, из-за активности ботов или скриптов. Чтобы обойти эту проблему, необходимо настроить сетевой трафик так, чтобы он выглядел так, будто приходит не от AWS. Вот несколько подходов, которые могут помочь в решении этой проблемы:

1. Использование прокси-серверов

С помощью прокси-серверов можно направлять запросы через IP-адреса, отличные от AWS. Вы можете использовать:

  • Публичные или частные прокси: Поищите надежные прокси-сервисы, которые предлагают IP-адреса из разных географических регионов. Убедитесь, что они не находятся в черном списке для archive.is.
  • Собственные прокси: Запустите прокси-сервер на своем локальном устройстве или VPS (Virtual Private Server), предоставляющем IP-адрес, который не принадлежит AWS.

2. Использование VPC и VPN

Можно создать виртуальную частную сеть (VPC) и подключиться к ней через VPN, который ведет к вашему домашнему или рабочему компьютеру. Это позволит вашему EC2 или Lambda как будто выходить в интернет через ваш личный IP-адрес:

  • Настройка VPC: Создайте VPC в AWS и настройте его для подключения к вашему устройству.
  • VPN-сервер: Настройте на своем устройстве VPN-сервер (например, OpenVPN) и подключите его к VPC. Это позволит вашему трафику выходить из AWS с использованием вашего IP-адреса.

3. Использование облачных серверов вне AWS

Вы можете рассмотреть возможность использования облачных провайдеров (таких как DigitalOcean, Google Cloud или Azure), которые предоставляют вам возможность размещения вашего приложения вне AWS. Тем самым, трафик будет поступать не из AWS.

4. Правильная настройка заголовков и темпа запросов

Если вы продолжите работать с AWS, попробуйте настроить свой скрипт для имитации поведения обычного пользователя. Это может включать:

  • Исключение частоты запросов: Вставьте задержки между запросами, чтобы имитировать "человеческое" поведение. Например, можно использовать setTimeout в JavaScript.
  • Правильная настройка заголовков: Убедитесь, что ваши заголовки (особенно User-Agent и Referer) соответствуют ожиданиям сервера.

5. Лимиты API и ограниченные запросы

Если вы можете контролировать частоту запросов, делайте это. Настройте свою программу так, чтобы она отправляла запросы только тогда, когда это действительно необходимо, и в ограниченных количествах по времени.

6. Локальный сервер

Если вы хотите, чтобы ваши запросы шли не с AWS, вы можете запустить локальный сервер (например, на вашем компьютере) и использовать API Gateway или туннелирование для того, чтобы ваши запросы направлялись через этот сервер. Это может быть более сложным, но оно поможет вам избежать ограничения.

Заключение

Использование этих методов может помочь вам обойти блокировку IP-адресов AWS, которую применяет archive.is. Обеспечение правильного использования вашего кода и соблюдение правил, заданных сайтом, также важно, чтобы избежать дальнейших ограничений. Пожалуйста, учитывайте эти меры предосторожности и старайтесь не нагружать серверы слишком частыми запросами.

Оцените материал
Добавить комментарий

Капча загружается...