Esempio n. 1
0
        /// <summary>
        /// Добавляет в цепочку новый прокси-клиент.
        /// </summary>
        /// <param name="proxy">Добавляемый прокси-клиент.</param>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxy"/> равно <see langword="null"/>.</exception>
        public void AddProxy(ProxyClient proxy)
        {
            #region Проверка параметров

            if (proxy == null)
            {
                throw new ArgumentNullException("proxy");
            }

            #endregion

            _proxies.Add(proxy);
        }
Esempio n. 2
0
        /// <summary>
        /// Преобразует строку в экземпляр класса <see cref="Socks5ProxyClient"/>. Возвращает значение, указывающее, успешно ли выполнено преобразование.
        /// </summary>
        /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
        /// <param name="result">Если преобразование выполнено успешно, то содержит экземпляр класса <see cref="Socks5ProxyClient"/>, иначе <see langword="null"/>.</param>
        /// <returns>Значение <see langword="true"/>, если параметр <paramref name="proxyAddress"/> преобразован успешно, иначе <see langword="false"/>.</returns>
        public static bool TryParse(string proxyAddress, out Socks5ProxyClient result)
        {
            ProxyClient proxy;

            if (ProxyClient.TryParse(ProxyType.Socks5, proxyAddress, out proxy))
            {
                result = proxy as Socks5ProxyClient;
                return(true);
            }
            else
            {
                result = null;
                return(false);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Создаёт соединение с сервером через цепочку прокси-серверов.
        /// </summary>
        /// <param name="destinationHost">Хост сервера, с которым нужно связаться через прокси-сервер.</param>
        /// <param name="destinationPort">Порт сервера, с которым нужно связаться через прокси-сервер.</param>
        /// <param name="tcpClient">Соединение, через которое нужно работать, или значение <see langword="null"/>.</param>
        /// <returns>Соединение с сервером через цепочку прокси-серверов.</returns>
        /// <exception cref="System.InvalidOperationException">
        /// Количество прокси-серверов равно 0.
        /// -или-
        /// Значение свойства <see cref="Host"/> равно <see langword="null"/> или имеет нулевую длину.
        /// -или-
        /// Значение свойства <see cref="Port"/> меньше 1 или больше 65535.
        /// -или-
        /// Значение свойства <see cref="Username"/> имеет длину более 255 символов.
        /// -или-
        /// Значение свойства <see cref="Password"/> имеет длину более 255 символов.
        /// </exception>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="destinationHost"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="destinationHost"/> является пустой строкой.</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">Значение параметра <paramref name="destinationPort"/> меньше 1 или больше 65535.</exception>
        /// <exception cref="xNet.Net.ProxyException">Ошибка при работе с прокси-сервером.</exception>
        public override TcpClient CreateConnection(string destinationHost, int destinationPort, TcpClient tcpClient = null)
        {
            #region Проверка состояния

            if (_proxies.Count == 0)
            {
                throw new InvalidOperationException(
                          Resources.InvalidOperationException_ChainProxyClient_NotProxies);
            }

            #endregion

            List <ProxyClient> proxies;

            if (EnableShuffle)
            {
                proxies = _proxies.ToList();

                // Перемешиваем прокси.
                for (int i = 0; i < proxies.Count; i++)
                {
                    int randI = Rand.Next(proxies.Count);

                    ProxyClient proxy = proxies[i];
                    proxies[i]     = proxies[randI];
                    proxies[randI] = proxy;
                }
            }
            else
            {
                proxies = _proxies;
            }

            int       length       = proxies.Count - 1;
            TcpClient curTcpClient = tcpClient;

            for (int i = 0; i < length; i++)
            {
                curTcpClient = proxies[i].CreateConnection(
                    proxies[i + 1].Host, proxies[i + 1].Port, curTcpClient);
            }

            curTcpClient = proxies[length].CreateConnection(
                destinationHost, destinationPort, curTcpClient);

            return(curTcpClient);
        }
Esempio n. 4
0
 /// <summary>
 /// Преобразует строку в экземпляр класса <see cref="Socks5ProxyClient"/>.
 /// </summary>
 /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
 /// <returns>Экземпляр класса <see cref="Socks5ProxyClient"/>.</returns>
 /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxyAddress"/> равно <see langword="null"/>.</exception>
 /// <exception cref="System.ArgumentException">Значение параметра <paramref name="proxyAddress"/> является пустой строкой.</exception>
 /// <exception cref="System.FormatException">Формат порта является неправильным.</exception>
 public static Socks5ProxyClient Parse(string proxyAddress)
 {
     return(ProxyClient.Parse(ProxyType.Socks5, proxyAddress) as Socks5ProxyClient);
 }
 /// <summary>
 /// Преобразуе?строку ?экземп??класса <see cref="HttpProxyClient"/>.
 /// </summary>
 /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользовате?:пароль. Тр?последни?параметр?являют? необязательными.</param>
 /// <returns>Экземп??класса <see cref="HttpProxyClient"/>.</returns>
 /// <exception cref="System.ArgumentNullException">Значение параметр?<paramref name="proxyAddress"/> равн?<see langword="null"/>.</exception>
 /// <exception cref="System.ArgumentException">Значение параметр?<paramref name="proxyAddress"/> являет? пустой строко?</exception>
 /// <exception cref="System.FormatException">Формат порт?являет? неправильным.</exception>
 public static HttpProxyClient Parse(string proxyAddress)
 {
     return(ProxyClient.Parse(ProxyType.Http, proxyAddress) as HttpProxyClient);
 }
        /// <summary>
        /// Отправляет GET-запрос HTTP-серверу.
        /// </summary>
        /// <param name="address">Адрес интернет-ресурса.</param>
        /// <param name="urlParams">Параметры URL-адреса, или значение <see langword="null"/>.</param>
        /// <param name="cookies">Кукисы, отправляемые HTTP-серверу, или значение <see langword="null"/>.</param>
        /// <param name="proxy">Прокси-клиент, используемый для запроса, или значение <see langword="null"/>.</param>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="address"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="address"/> является пустой строкой.</exception>
        /// <exception cref="xNet.Net.HttpException">Ошибка при работе с HTTP-протоколом.</exception>
        public static void Get(string address, RequestParams urlParams = null, CookieDictionary cookies = null, ProxyClient proxy = null)
        {
            using (var request = new HttpRequest())
            {
                if (cookies == null)
                {
                    request.Cookies = new CookieDictionary();
                }
                else
                {
                    request.Cookies = cookies;
                }

                request.Proxy     = proxy;
                request.KeepAlive = false;
                request.UserAgent = HttpHelper.ChromeUserAgent();

                request.Get(address, urlParams).None();
            }
        }
        /// <summary>
        /// Отправляет POST-запрос HTTP-серверу. Загружает тело сообщения и возвращает его в виде строки.
        /// </summary>
        /// <param name="address">Адрес интернет-ресурса.</param>
        /// <param name="content">Контент, отправляемый HTTP-серверу.</param>
        /// <param name="cookies">Кукисы, отправляемые HTTP-серверу, или значение <see langword="null"/>.</param>
        /// <param name="proxy">Прокси-клиент, используемый для запроса, или значение <see langword="null"/>.</param>
        /// <returns>Если тело сообщения отсутствует, то будет возвращена пустая строка.</returns>
        /// <exception cref="System.ArgumentNullException">
        /// Значение параметра <paramref name="address"/> равно <see langword="null"/>.
        /// -или-
        /// Значение параметра <paramref name="content"/> равно <see langword="null"/>.
        /// </exception>
        /// <exception cref="xNet.Net.HttpException">Ошибка при работе с HTTP-протоколом.</exception>
        public static string Post(Uri address, HttpContent content, CookieDictionary cookies = null, ProxyClient proxy = null)
        {
            using (var request = new HttpRequest())
            {
                if (cookies == null)
                {
                    request.Cookies = new CookieDictionary();
                }
                else
                {
                    request.Cookies = cookies;
                }

                request.Proxy     = proxy;
                request.KeepAlive = false;
                request.UserAgent = HttpHelper.ChromeUserAgent();

                return(request.Post(address, content).ToString());
            }
        }
        /// <summary>
        /// Отправляет GET-запрос HTTP-серверу. Загружает тело сообщения и возвращает его в виде текста.
        /// </summary>
        /// <param name="address">Адрес интернет-ресурса.</param>
        /// <param name="urlParams">Параметры URL-адреса, или значение <see langword="null"/>.</param>
        /// <param name="cookies">Кукисы, отправляемые HTTP-серверу, или значение <see langword="null"/>.</param>
        /// <param name="proxy">Прокси-клиент, используемый для запроса, или значение <see langword="null"/>.</param>
        /// <returns>Если тело сообщения отсутствует, то будет возвращён пустой массив байтов.</returns>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="address"/> равно <see langword="null"/>.</exception>
        /// <exception cref="xNet.Net.HttpException">Ошибка при работе с HTTP-протоколом.</exception>
        public static byte[] GetBytes(Uri address, RequestParams urlParams = null, CookieDictionary cookies = null, ProxyClient proxy = null)
        {
            using (var request = new HttpRequest())
            {
                if (cookies == null)
                {
                    request.Cookies = new CookieDictionary();
                }
                else
                {
                    request.Cookies = cookies;
                }

                request.Proxy     = proxy;
                request.KeepAlive = false;
                request.UserAgent = HttpHelper.ChromeUserAgent();

                return(request.Get(address, urlParams).ToBytes());
            }
        }
Esempio n. 9
0
 /// <summary>
 /// Инициализирует новы?экземп??класса <see cref="xNet.Net.ProxyException"/> заданным сообщением об ошибке ?прокси-клиентом.
 /// </summary>
 /// <param name="message">Сообщени?об ошибке ?об?снение?причин?исключен?.</param>
 /// <param name="proxyClient">Прокси-клиент, ?которо?произошл?ошибка.</param>
 /// <param name="innerException">Исключение, вызвавше?текущи?исключение, ил?значение <see langword="null"/>.</param>
 public ProxyException(string message, ProxyClient proxyClient, Exception innerException = null)
     : base(message, innerException)
 {
     ProxyClient = proxyClient;
 }