Настройка прокси в Go

Прокси в Go через net/http: http.ProxyURL в Transport, логин и пароль в адресе, SOCKS5 схемой socks5:// без сторонних модулей и таймаут клиента.

Обновлено · Редакция Prokso

Данные для подключения
Хост
gw.prokso.com
Порт
823 HTTP · 824 SOCKS5 — новый IP на каждый запрос · 10000–20000 фиксированный IP (sticky-сессия), HTTP(S) и SOCKS5
Логин и пароль
в кабинете, на странице плана

Готовые строки в нужном формате генерирует кабинет: выберите страну, тип IP и протокол.

Коротко
  • Хост — gw.prokso.com, порты 823 (HTTP), 824 (SOCKS5), 10000–20000 (фиксированный IP, HTTP или SOCKS5)
  • Логин и пароль — в кабинете на странице плана
  • Проверяйте IP в ответе самого запроса через прокси: страница «Мой IP» в браузере ваш скрипт не проверяет

Пошаговая инструкция, как подключить прокси Prokso в Go. Займёт несколько минут.

Шаг 1. Возьмите данные прокси в кабинете

Откройте план и скопируйте хост gw.prokso.com, порт, логин и пароль. Порт 823 — HTTP, 824 — SOCKS5 (оба дают новый IP на каждый запрос); порты 10000–20000 — фиксированный IP до 120 минут, работают и как HTTP, и как SOCKS5 (каждый порт — отдельный адрес). Страну задают в логине: логин__cr.ua.

Шаг 2. Ничего не устанавливайте

Всё нужное есть в стандартной библиотеке: пакеты net/http и net/url. Сторонние модули не понадобятся ни для HTTP, ни для SOCKS5.

package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, err := url.Parse("http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823")
	if err != nil {
		panic(err)
	}
	client := &http.Client{
		Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},
		Timeout:   30 * time.Second,
	}
	resp, err := client.Get("https://api.ipify.org?format=json")
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

Шаг 3. Задайте прокси в Transport

Разберите адрес прокси с логином и паролем через url.Parse и передайте его в поле Proxy через http.ProxyURL. Go сам добавит заголовок авторизации — и для обычных запросов, и для https-сайтов через туннель.

Шаг 4. SOCKS5 тем же адресом

Тип прокси Go определяет по схеме адреса. Замените http:// на socks5:// и порт на 824 — остальной код не меняется. Логин и пароль так же берутся из адреса.

Шаг 5. Один клиент на весь скрипт

Создавайте http.Client один раз и используйте его во всех горутинах: он безопасен для параллельной работы и переиспользует соединения с прокси. Для серии запросов с одного IP возьмите фиксированный порт 10000–20000.

Шаг 6. Если соединение не устанавливается

Сверьте хост gw.prokso.com, порт и схему: HTTP на 823, SOCKS5 на 824, на портах 10000–20000 — оба. Ошибка 407 означает неверный логин или пароль либо закончившийся трафик: проверьте остаток на странице плана в кабинете. Таймаут чаще всего значит, что порт введён с ошибкой или клиент ждёт другой протокол. Если работаете с доступом по IP, убедитесь, что в белый список добавлен внешний адрес именно той машины, где запускается код.

Шаг 7. Проверьте вывод

Запустите пример: программа обращается к https://api.ipify.org и печатает IP, который видит сайт. Это должен быть адрес прокси, а не ваш. Ошибка 407 означает неверный логин или пароль либо закончившийся трафик на плане. Страница «Мой IP» в браузере здесь не поможет: браузер идёт напрямую.

Вопросы и ответы

Подхватит ли Go прокси из переменных окружения?

Только если в Transport стоит <code>http.ProxyFromEnvironment</code> — так сделано в стандартном <code>http.DefaultTransport</code>. Тогда действуют <code>HTTPS_PROXY</code> и <code>HTTP_PROXY</code>. В примере прокси задан явно, и переменные на него не влияют.

Почему запрос висит без ответа?

Задайте <code>Timeout</code> в клиенте, как в примере: без него Go будет ждать бесконечно. Если таймаут срабатывает сразу, сверьте порт и схему — HTTP на 823, SOCKS5 на 824.

Какой порт выбрать?

Порт 823 (HTTP) или 824 (SOCKS5) даёт новый IP на каждый запрос — удобно для сбора данных. Порт 10000–20000 держит один IP до 120 минут — для сессий со входом в аккаунт. На план приходится до 1000 одновременных соединений.

Как выбрать страну?

Страна записана в логине прокси. Сгенерируйте в кабинете строку для нужной страны и подставьте в код логин из неё — остальной адрес не меняется.

Что делать, если часть запросов падает?

При сборе данных отдельные адреса бывают медленными или недоступными. Добавьте в код несколько повторных попыток с паузой: на порту 823 или 824 каждая попытка пойдёт уже с нового адреса.