Для проверки типа прокси в языке программирования Go можно воспользоваться стандартными библиотеками net/http и net/url.
Вот пример кода, который позволяет проверить тип прокси:
package main import ( "fmt" "net" "net/http" "net/url" "time" ) func main() { proxyURL, err := url.Parse("http://proxy.example.com:8080") if err != nil { fmt.Println("Ошибка при разборе URL прокси:", err) return } transport := &http.Transport{ Proxy: http.ProxyURL(proxyURL), DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).DialContext, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, } client := &http.Client{ Transport: transport, Timeout: 30 * time.Second, } resp, err := client.Get("https://www.example.com") if err != nil { fmt.Println("Ошибка при отправке HTTP-запроса:", err) return } defer resp.Body.Close() if resp.StatusCode == http.StatusOK { fmt.Println("Прокси типа HTTP") } else if resp.StatusCode == http.StatusGatewayTimeout { fmt.Println("Прокси типа SOCKS") } else { fmt.Println("Не удалось определить тип прокси") } }
В этом примере мы используем функцию url.Parse
для разбора URL прокси. Затем мы создаем объект http.Transport
и передаем разобранный URL прокси в качестве параметра Proxy
. Затем мы создаем клиент http.Client
с указанным транспортом.
Затем мы совершаем HTTP-запрос с помощью метода client.Get
на какой-либо адрес (в данном случае https://www.example.com). Полученный ответ проверяем на статус код: если код равен http.StatusOK
, то это значит, что прокси имеет тип HTTP. Если код равен http.StatusGatewayTimeout
, то значит, что прокси имеет тип SOCKS. В противном случае, не удалось определить тип прокси.
Этот пример позволяет определить тип прокси на основе ответа от сервера. Однако, следует иметь в виду, что этот метод не всегда может быть точен и надежен, так как некоторые прокси-серверы могут быть настроены таким образом, чтобы не передавать информацию об их типе. В таких случаях можно использовать другие методы, например, анализировать информацию в заголовках ответа или проводить дополнительные тесты.