NP NEONPROXYPROXY NETWORK
КупитьЦеныFAQПартнёркаБлог Прокси-чекерМой IPAPI TG-бот

Прокси в Ruby Faraday: настройка HTTP-клиента

Faraday — популярный HTTP-клиент в экосистеме Ruby: его используют в Rails-приложениях, гемах для API и скриптах мониторинга. Когда нужно скрыть исходный IP или распределить нагрузку между адресами, прокси подключается через опцию :proxy или кастомный middleware. Разберём рабочие конфигурации для NEONPROXY без лишней магии.

Базовая настройка HTTPS-прокси

После заказа вы получаете строку host:port:login:password. В Faraday URL прокси формируется так: http://login:password@host:port. Схема http:// в адресе прокси корректна даже для HTTPS-запросов — Faraday использует CONNECT-туннель.

require 'faraday' conn = Faraday.new( url: 'https://api.ipify.org', proxy: 'http://user:pass@185.22.34.89:8080', request: { timeout: 15, open_timeout: 10 } ) response = conn.get('/?format=json') puts response.body

Проверьте, что в ответе IP прокси, а не ваш домашний адрес. Если прокси игнорируется — убедитесь, что адаптер поддерживает proxy (Net::HTTP по умолчанию поддерживает).

SVYAZVPN — свобода без границ

SOCKS5 и выбор адаптера

Для SOCKS5 удобнее адаптер с явной поддержкой, например через gem socksify или Typhoeus. Формат URL: socks5://login:password@host:port. SOCKS5 полезен, когда приложение ходит на нестандартные порты или нужен единый туннель для нескольких протоколов. На тарифах NEONPROXY оба протокола доступны на одном адресе — выбирайте по требованиям библиотеки.

Middleware для ротации пула

При парсинге или массовых API-запросах один IP быстро упирается в rate limit. Создайте middleware, который перед каждым запросом подставляет следующий адрес из массива. Список адресов можно подгружать из API NEONPROXY при старте воркера Sidekiq или cron-задачи.

Faraday в Rails и фоновых задачах

В Rails прокси лучше хранить в credentials или ENV, а не хардкодить. Один worker process может переиспользовать Faraday::Connection — это экономит TCP-handshake. В Docker убедитесь, что контейнер резолвит host прокси и egress firewall не блокирует порт 8080 или 1080.

SSL, сертификаты и Faraday::SSLError

Не отключайте verify SSL при первой ошибке — чаще причина в неверном CA store, а не в прокси. Проверьте credentials через curl с теми же параметрами. Для Typhoeus включайте debug-логи только локально: URL с паролем в production-логах — риск утечки.

IPv4 или IPv6 под задачу

Массовый сбор JSON с публичных REST API — IPv6-пул с ротацией в middleware. OAuth-провайдер с привязкой к IP — один приватный IPv4. Sticky session на 15–30 минут полезна, если API выдаёт session cookie после первого запроса. Сравнение типов адресов — в материале IPv6 vs IPv4.

Типичные ошибки

Забытый open_timeout — скрипт «висит» на мёртвом прокси. Смешение Faraday-сессий с разными прокси в одном аккаунте соцсети — риск бана. Использование shared-канала для платёжных API. Передача реального IP в заголовках X-Forwarded-For.

Перед деплоем прогоните адреса через чекер и проверьте геолокацию через «Мой IP».

Faraday::Connection и повторные запросы

Оборачивайте нестабильные вызовы в retry с экспоненциальной паузой. При Faraday::ConnectionFailed или HTTP 429 переключайтесь на следующий прокси из пула, а не повторяйте запрос на том же IP десять раз подряд. Для production добавьте structured logging: proxy host (без пароля), status code, latency в миллисекундах, target URL path.

Gem faraday-retry удобен для idempotent GET, но для POST с side effects комбинируйте retry только при network errors, не при 4xx от origin. При парсинге маркетплейсов 403 часто означает «смените IP», а не «повторите через секунду».

Middleware для ротации: полный пример

class ProxyRotator < Faraday::Middleware def initialize(app, pool) super(app) @pool = pool.cycle end def call(env) env[:request][:proxy] = @pool.next @app.call(env) end end pool = ['http://u1:p1@10.0.0.1:8080', 'http://u2:p2@10.0.0.2:8080'] conn = Faraday.new { |f| f.use ProxyRotator, pool; f.adapter Faraday.default_adapter }

Pool можно обновлять at runtime: при получении 407 или connection refused удаляйте адрес из массива и алертьте, если pool опустел ниже threshold. Для Sidekiq jobs передавайте connection factory, а не global singleton с одним proxy.

Тестирование и benchmark

Перед production load test прогоните 100 sequential requests через каждый proxy в pool и постройте histogram latency. Outlier с p99 > 3s исключите из rotation. Сравните throughput IPv6 vs IPv4 на вашем target domain — иногда IPv6 дешевле, но медленнее на legacy CDN. Документируйте baseline, чтобы при инциденте отличить деградацию прокси от падения target API.

Краткий чеклист

Разовые API-вызовы → один приватный IPv4, HTTPS. Массовый краулинг → IPv6 или shared с ротацией. Sidekiq + API → middleware + пул из API. Отладка → Faraday response logger только в dev.