GeekProxy с CleanTalk и ZeroBounce

Оба сервиса проверяют данные на своих серверах, и настройки прокси нет ни у одного. ZeroBounce зато умеет белый список IP на каждый API-ключ, и вот там пригодится фиксированный адрес GeekProxy. CleanTalk интересует в основном IP посетителя, который вы передаёте параметром. В гайде: как звать оба API со статического IP через curl и Python, что умеют и чего не умеют официальные SDK, и как развести клиентские кабинеты по отдельным профилям браузера.

Что нужно: активный план GeekProxy со статическим IP и данные прокси из кабинета. Настройка занимает минут десять.

Получить прокси

1 Перед началом

Поля для прокси нет ни там, ни там. Мы прочитали документацию ZeroBounce по API и управлению ключами, страницы методов CleanTalk и обе официальные Python-библиотеки. ZeroBounce ходит к почтовым серверам со своей инфраструктуры, 25-й порт вам не нужен. CleanTalk оценивает посетителя, которого вы описали в запросе, а не машину, с которой запрос пришёл. Прокси полезен только на вашей стороне, и по двум причинам:

  • У ключей ZeroBounce есть Whitelist IP. Как только он задан, каждый вызов обязан приходить с этого адреса, и скрипту нужен выход, который не меняется
  • Вы хотите, чтобы весь API-трафик с нескольких серверов или ноутбука уходил через один известный адрес: под правило файрвола, под регион или просто ради предсказуемости

Ротируемый резидентский прокси не годится ни для того, ни для другого. Годится один статический IP, один и навсегда.

Что понадобится

  • Активный план GeekProxy со статическим IP (датацентр или ISP)
  • Данные прокси из кабинета: хост, порт, логин, пароль
  • API-ключ ZeroBounce, ключ доступа CleanTalk или оба. ZeroBounce даёт 100 бесплатных проверок в месяц при регистрации на бизнес-домен, у CleanTalk Anti-Spam есть пробные 7 дней
  • curl либо Python 3.8 или новее с requests
Ваши данные доступа
  • Поле Откуда взять
  • Протокол HTTP / SOCKS5
  • Хост IP или имя шлюза из кабинета
  • Порт из кабинета
  • Логин из кабинета
  • Пароль из кабинета

2 Где взять данные прокси

  1. Войдите в кабинет GeekProxy
  2. Откройте план. У планов с оплатой за IP (датацентр, ISP) список адресов, порт, логин и пароль лежат на карточке, а Export отдаёт весь список текстом
  3. Держите IP выхода под рукой. На статическом плане хост, к которому вы подключаетесь, и есть адрес, который увидит ZeroBounce и который пойдёт в белый список
Кабинет GeekProxy, Subscriptions
Кабинет GeekProxy, страница Subscriptions: планы ISP со ссылкой Export, планы Residential Flex и Turbo с кнопками Options и Add GB

3 ZeroBounce: белый список и вызов API

Ключи живут в разделе API Keys Management. Нажмите Create a new API Key справа вверху, назовите ключ, включите его. Документация говорит, что Whitelist IP настраивается «through Edit Mode after you have created your key». Откройте ключ в Edit Mode и добавьте статический IP GeekProxy. Можно одиночный адрес, можно диапазон, можно несколько. Сохраните. У Master Key редактируется только Whitelist IP, а лишние ключи можно удалять, когда они больше не нужны.

ZeroBounce, API Keys Management
Модальное окно Edit API Key в ZeroBounce: имя ключа, переключатель Active и поле Whitelist IP с кнопкой Add

Теперь вызов. Эндпоинт https://api.zerobounce.net/v2/validate, региональные близнецы api-us.zerobounce.net и api-eu.zerobounce.net. Обязательные параметры api_key и email. Необязательные: ip_address, timeout от 3 до 60 секунд (по умолчанию 30), activity_data, verify_plus.

curl -x http://LOGIN:PASSWORD@IP:PORT \
     "https://api.zerobounce.net/v2/validate?api_key=$ZB_KEY&[email protected]"

На чём спотыкаются: ip_address это IP регистрации подписчика, данные о лиде. Не ваш клиентский IP, и прокси его не меняет. Нет под рукой, оставьте пустым, документация разрешает.

Python requests

import os, requests

PROXY = "http://LOGIN:PASSWORD@IP:PORT"
proxies = {"http": PROXY, "https": PROXY}

r = requests.get("https://api.zerobounce.net/v2/validate",
                 params={"api_key": os.environ["ZB_KEY"], "email": "[email protected]"},
                 proxies=proxies, timeout=(5, 60))
print(r.json())

Шестьдесят секунд на чтение не случайность. ZeroBounce пишет, что ответ занимает от 1 до 30 секунд, а большинство доменов отвечают за одну, максимум пять секунд.

Официальный Python SDK

pip install zerobouncesdk, затем ZeroBounce("<YOUR_API_KEY>") и validate(email, ip_address). Мы заглянули в исходник: он зовёт requests.get и requests.post на уровне модуля, без аргумента proxies и без Session, до которой можно дотянуться. Остаются переменные окружения, и они работают, потому что requests читает их, когда больше ничего не передано.

export HTTPS_PROXY="http://LOGIN:PASSWORD@IP:PORT"
python3 -c "from zerobouncesdk import ZeroBounce; zb = ZeroBounce('$ZB_KEY'); print(zb.validate('[email protected]', ''))"

Для SOCKS5 задайте ALL_PROXY="socks5h://..." и сначала поставьте requests[socks].

Терминал, ZeroBounce validate через статический IP GeekProxy
Терминал: curl через прокси показывает IP прокси, затем эндпоинт validate ZeroBounce возвращает JSON со статусом адреса

4 CleanTalk: Anti-Spam и Database API

CleanTalk это два API с двумя эндпоинтами. Методы Anti-Spam (check_newuser, check_message, check_bot и компания) уходят POST-запросом с JSON на https://moderate.cleantalk.org/api2.0. Методы Database, например spam_check, это GET на https://api.cleantalk.org. Тарифицируются продукты раздельно. Через прокси оба выглядят так:

# Database API: есть ли адрес или IP в чёрных списках? (за последние 6 месяцев)
curl -x http://LOGIN:PASSWORD@IP:PORT \
     "https://api.cleantalk.org/?method_name=spam_check&auth_key=$CT_DB_KEY&[email protected]"

# Anti-Spam API: пускать ли эту регистрацию?
curl -x http://LOGIN:PASSWORD@IP:PORT \
     -H "Content-Type: application/json" \
     -d '{"method_name":"check_newuser","auth_key":"'"$CT_KEY"'",
          "sender_ip":"203.0.113.10","sender_email":"[email protected]",
          "js_on":1,"submit_time":15,
          "sender_info":{"REFFERRER":"https://example.com/signup","USER_AGENT":"Mozilla/5.0"}}' \
     https://moderate.cleantalk.org/api2.0

В ответе Anti-Spam приходит allow (1 или 0), поле codes с причинами вроде BL, FORBIDDEN, FAST_SUBMIT или EMAIL_DOMAIN_DISPOSABLE, плюс blacklisted, js_disabled и fast_submit. Обратите внимание, что такое sender_ip: адрес посетителя, который передаёте вы. IP прокси в оценку не попадает. А если случайно передать адрес прокси как sender_ip, не удивляйтесь, что spam_check его пометит: метод возвращает флаги типа сети, среди них paid_vpn и tor.

Лимиты Database API со страницы метода: 100 вызовов за 60 секунд, 1 000 элементов на вызов, рекомендованный таймаут не больше 180 секунд. Пачка уходит POST-полем data через запятую, и один запрос с двумя IP считается за две проверки. Проверки существования ящика и одноразовости только GET, по одному адресу на вызов.

Python

Официальная библиотека CleanTalk ставится как pip install cleantalk-python-antispam, импорт from cleantalk_python_antispam.cleantalk import CleanTalk, дальше CleanTalk(auth_key='yourkey') и ct.request(...). README не называет ни HTTP-библиотеку, ни опцию прокси, поэтому обещать, что трюк с окружением там сработает, не будем. Гарантированный путь: звать эндпоинты через requests с явным proxies=:

import os, requests

PROXY = "http://LOGIN:PASSWORD@IP:PORT"
proxies = {"http": PROXY, "https": PROXY}

body = {"method_name": "check_newuser", "auth_key": os.environ["CT_KEY"],
        "sender_ip": "203.0.113.10", "sender_email": "[email protected]",
        "js_on": 1, "submit_time": 15,
        "sender_info": {"REFFERRER": "https://example.com/signup", "USER_AGENT": "Mozilla/5.0"}}

r = requests.post("https://moderate.cleantalk.org/api2.0", json=body,
                  proxies=proxies, timeout=(5, 30))
print(r.json()["allow"], r.json().get("codes"))
Терминал, CleanTalk check_newuser через статический IP GeekProxy
Терминал: POST на moderate.cleantalk.org через прокси, в JSON-ответе видны allow и codes

5 Кабинеты клиентов в отдельных профилях

Агентства часто держат по аккаунту ZeroBounce и CleanTalk на клиента, у каждого своя оплата и свои ключи. Ни один из продуктов отдельных IP для этого не требует. И всё же аккуратнее выдать каждому клиенту профиль браузера со своим статическим IP GeekProxy. Тогда адрес, с которого вы правите белый список клиента, совпадает с адресом, с которого будут ходить его скрипты.

  • Firefox хранит прокси на уровне профиля и умеет SOCKS с удалённым DNS
  • Chrome берёт прокси из системы; отдельный прокси на окно это --proxy-server="http://IP:PORT" плюс отдельная папка профиля
  • SOCKS5 с логином и паролем не работает в Chromium-браузерах и Firefox. Берите HTTP с логином и паролем или SOCKS5 с белым списком IP в плане GeekProxy

6 Проверка работы

Сначала curl -x http://LOGIN:PASSWORD@IP:PORT https://ipinfo.io/json. IP должен совпасть с Whitelist IP на ключе ZeroBounce. Потом вызов validate из раздела 3, ждём JSON со статусом адреса. Потом тот же validate без -x: с ключом в белом списке с домашнего IP он пройти не должен.

У CleanTalk проверки по IP нет, так что успех это просто JSON-ответ с полем allow, а в sender_ip адрес посетителя, не прокси.

7 Какой продукт GeekProxy подходит

Это JSON-трафик на килобайты, и единственное, что важно, чтобы IP никогда не менялся. Датацентр IPv4 самый дешёвый статический адрес под такое. Берите статический ISP, если выход должен выглядеть домашним подключением или совпадать с правилом файрвола на вашей стороне. Residential Turbo, Residential Flex и мобильные ротируются и тарифицируются по трафику. Здесь это ничего не даёт и ломает ключ с белым списком, как только выход сдвинется.

8 Частые проблемы

ZeroBounce отбивает ключ с Whitelist IP

Вызов ушёл с другого адреса. Сравните https://ipinfo.io/json через прокси с белым списком ключа. На ротируемом плане это ожидаемый исход, переезжайте на статический IP.

Поставил в ip_address адрес прокси, ничего не изменилось

И не должно. Этот параметр описывает подписчика, а не ваше соединение. Передавайте реальный IP регистрации или оставьте пустым.

CleanTalk помечает мой трафик как paid_vpn

Вы скормили адрес прокси в sender_ip или в spam_check. Отправляйте IP посетителя. CleanTalk классифицирует любой адрес, который вы ему дали.

Ошибки лимита

ZeroBounce разрешает 80 000 запросов валидации за 10 секунд и блокирует на минуту при превышении, а 200 запросов с плохим ключом в час дают блок на час. Database API CleanTalk останавливается на 100 вызовах за 60 секунд. Оба лимита висят на ключе. Второй прокси ничего не меняет.

SDK ZeroBounce не видит прокси

Переменная задана после старта Python или без схемы. Экспортируйте HTTPS_PROXY с http:// впереди до запуска, а для socks5h:// проверьте, что стоит requests[socks].

Не получается? Напишите нам в Telegram, Discord или в чат на сайте. Обычно отвечаем в течение нескольких минут.

Статический IP для CleanTalk и ZeroBounce

Датацентр и ISP-адреса, которые не меняются, HTTP и SOCKS5, без счётчика трафика.

Заказать

We use cookies to improve user experience. By clicking "Yes, I agree", you consent to this use of cookies.

Привилегия первых: В честь глобального запуска [мы даем скидку 50%+] на все датацентр тарифы. Эксклюзивное предложение для наших стартовых партнеров.