saveapi.org

Почему ваш скрейпер Instagram работает на ноутбуке и умирает на сервере

Самое частое письмо в нашей поддержке — вариация на тему «вчера на моей машине работало». Работало, и будет работать — на той машине. Instagram, TikTok и сайты перед ними относятся к адресу Hetzner или AWS иначе, чем к домашнему подключению, и скрейпер, прошедший все локальные тесты, встречает эту разницу в проде. Это руководство — в чём разница, с измерениями, и как строить вместе с ней, а не против неё.

Обновлено

Адрес и есть отпечаток

Платформы оценивают запрос до того, как прочитать его: ASN дата-центра, TLS-рукопожатие, не совпадающее с заявленным браузером, и несуществующая сессия — всё снижает оценку, и вы получаете стену логина или капчу. Ваш ноутбук проходит все три без усилий. Сервер проваливает первую раньше, чем запустится ваш код.

Что мы измерили

Собственные эндпоинты Instagram с IP Hetzner: 0 из 11 постов. yt-dlp: 0 из 13. Сайты-посредники для скачивания ушли тем же путём один за другим — одно их семейство поставило капчу Turnstile перед адресами дата-центров и упало с 11 из 11 в июле до 0 из 8 в сентябре 2026. Каждая из этих ссылок в тот же день разрешалась с домашнего подключения.

Почему прокси — беговая дорожка, а не решение

Резидентный прокси восстанавливает оценку на время, а потом пул помечают, потому что те же адреса арендуют все остальные. TLS-отпечаток требует клиента, имитирующего рукопожатие браузера, — обычные requests или httpx отклоняются с 422 ещё до чтения тела. Каждое исправление — ещё одна подвижная часть, за которой надо следить, а платформа меняется быстрее, чем вы патчите.

Как выглядит резолвер, который с этим живёт

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

Terminal
curl -s "https://api.saveapi.org/v1/instagram" \
  -H "Authorization: Bearer sk_live_xxxx" \
  -G --data-urlencode "url=https://www.instagram.com/reel/ABC123/"

Обработайте две оставшиеся ошибки

Никакая цепочка не сделает удалённый пост существующим. Ответ различает: ссылка, которую отверг источник, приходит с финальным кодом и стоит 0.1 кредита; таймаут или ошибка источника не стоят ничего и заслуживают ровно одной повторной попытки. Держите повторяемые коды в одном месте и никогда не повторяйте финальный ответ.

Python
RETRY = {"UPSTREAM_TIMEOUT", "UPSTREAM_ERROR"}

async def resolve(link: str) -> dict:
    for attempt in (1, 2):
        r = await client.get(API, params={"url": link}, headers=HEADERS)
        data = r.json()
        if data["success"] or data["error"]["code"] not in RETRY:
            return data
    return data

Вопросы перед началом

Поможет ли VPN на сервере?
Выходы потребительских VPN — тоже адреса дата-центров, а общие помечают быстрее, чем ваш. Единственное важное измерение — с того адреса, на который вы деплоите.
API работает на IP дата-центров?
Да — на тех же, на какие деплоите вы. Разница в том, что его источники подобраны и измерены именно для такого адреса и заменяются, когда перестают работать, — иначе эту работу делали бы вы.
Какие платформы затронуты?
Instagram — крайний случай, собственные эндпоинты TikTok ведут себя так же; сайты с открытым JSON, например Pinterest, почти безразличны. На главной показан измеренный процент успеха по всем.

Платформы, использованные здесь

Другие руководства

Запустите это руководство со своим ключом

Ключ за минуту. 1 000 бесплатных кредитов, без карты и без срока.

Получить ключ и попробоватьПолный справочник API