Прокси в Go net/http
Стандартная библиотека Go предоставляет гибкую настройку прокси через http.Transport и функцию http.ProxyFromEnvironment. Для SOCKS5 используйте пакет golang.org/x/net/proxy. Данные NEONPROXY: host:port:login:password — разберём оба протокола и ротацию пула.
HTTPS-прокси через Transport
URL прокси должен содержать user:pass до @ — спецсимволы в пароле кодируйте через url.UserPassword и user.String().
SOCKS5 dialer
SOCKS5 удобен для единого туннеля на нестандартные порты. Сравнение с HTTPS — SOCKS5 vs HTTPS.
Переменные окружения
Так же работают многие Go CLI и тесты в CI. Перед деплоем проверьте канал в /tools/checker/.
Ротация пула NEONPROXY
Список адресов можно загружать из API NEONPROXY — см. интеграцию API. При 429 и 403 меняйте прокси, а не только User-Agent — разбор 429.
Типичные ошибки
proxyconnect tcp: dial tcp ... connection refused — неверный host/port. 407 Proxy Authentication Required — ошибка в login/password. TLS handshake errors — чаще на стороне целевого сервера, не прокси. Логируйте resp.Request.URL и статус; для отладки включите GODEBUG=http2debug=2 только локально.
Java-аналог: Java HttpClient. Python: requests.
context.Context и отмена
Прокси с высоким latency не должен блокировать весь worker pool — всегда задавайте timeout на контексте и на Client.
colly и chromedp
Colly принимает SetProxyFunc с тем же url.Parse на NEONPROXY. Chromedp запускает Chrome — прокси задавайте через allocator options chromedp.ProxyServer, см. headless Chrome.
Тесты: httptest и integration
Unit-тесты мокают Transport; integration-тесты гоняйте против реального proxy URL из env NEONPROXY_URL. Парсите host:port:login:password одной функцией:
Не логируйте полный URL с паролем в production — маскируйте credentials в zap/slog.
resty и gin middleware
В go-resty v2: client.SetProxy("http://user:pass@host:8080"). Для gin можно вынести HttpClient с прокси в middleware и передавать через context в handlers — так все исходящие webhook'и идут через NEONPROXY с одного IP compliance-отдела.
Graceful shutdown: при остановке сервиса закройте idle connections Transport через transport.CloseIdleConnections(), иначе FIN может задержаться на стороне прокси.
Для observability добавьте метку proxy_host в логи исходящих запросов (без пароля) — при всплеске 502 легко понять, какой IP из пула NEONPROXY перегружен. Деплой в Docker: передайте HTTP_PROXY в compose и проверьте egress через чекер изнутри контейнера.
Итог: http.Transport с ProxyURL или ProxyFromEnvironment покрывает большинство Go-сервисов. SOCKS5 — через golang.org/x/net/proxy. Держите парсер строки NEONPROXY в одном пакете config.
Модуль net/http в stdlib достаточен для большинства microservices — внешние HTTP-клиенты нужны только при нестандартных retry/backoff требованиях к прокси-пулу.
Используйте httputil.DumpRequestOut только в dev — dump содержит Proxy-Authorization. В prod достаточно логировать host прокси и status code ответа upstream.
Экспортируйте функцию NewProxyClient() из internal/proxy — единая точка настройки Transport упростит смену пула NEONPROXY без правок во всех handlers.
Перед релизом прогоните go test ./... с NEONPROXY_URL в env — integration-тест на api.ipify.org занимает секунды и предотвращает сюрпризы в prod.
Прокси для Go-микросервисов
IPv4/IPv6 для scraper и API-клиентов — host:port:login:password мгновенно.
Перейти к заказу