Я создал замыкание, которое фиксирует адрес прокси-сервера обратного соединения с% d, чтобы можно было вращать прокси с помощью rand, например. прокси-функция записывает эту строку "https://[redacted] -session-% d: [отредактировано] @ [отредактировано] ". Функция работает правильно, имея возможность подключиться к прокси-серверу и вернуть запрошенные данные. Но при тестировании на сервисах, которые возвращают ваш IP-адрес, я получал противоречивые результаты. https://canihazip.com/s возвращает один и тот же адрес для каждого запроса на один прогон;Под этим я подразумеваю, что при запуске программы я делаю 3 GET для сайта, и один и тот же IP-адрес будет возвращаться для каждого запроса, но при повторном запуске программы я получу другой IP-адрес при первом запуске, но все IP-адреса будутбыть таким же. Теперь при тестировании на https://httpbin.org/get я получу уникальный IP-адрес для каждого запроса.
Я неправильно использую транспорт? Должен ли я не доверять результатам canihazip? Есть ли какая-то другая часть транспорта, которую я должен использовать?
Так я создаю функцию прокси для транспорта
func rotatingProxy(options *Options) func(r *http.Request) (url *url.URL, err error) {
rotatingAddress := options.BuildRotatingAddress()
return func(*http.Request) (*url.URL, error) {
randomInt := prng.Int31n(math.MaxInt32)
sessionId := int(randomInt)
address := fmt.Sprintf(rotatingAddress, sessionId)
addressUrl, err := url.Parse(address)
return addressUrl, err
}
}
Тестовый код (ошибки для краткости игнорируются)
req1, _ := http.NewRequest("GET", "https://canihazip.com/s", nil)
req2, _ := http.NewRequest("GET", "https://httpbin.org/get", nil)
client := &http.Client{
Transport:&http.Transport{
Proxy:rotatingProxy(opts),
},
}
for i := 0; i < 3; i++ {
go func(iter int) {
res, _ := client.Do(req1)
body1, _ := ReadAll(res.Body)
fmt.Println(iter)
fmt.Println(string(body1))
res, _ = client.Do(req2)
body2, _ := ReadAll(res.Body)
fmt.Println(iter)
fmt.Println(string(body2))
}(i)
}