Налаштування проксі в 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 (sticky-сесія) до 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 кожна спроба піде вже з нової адреси.