示例#1
0
        public static void MakeClient(xNet.Net.HttpRequest request, Proxy proxy)
        {
            ProxyType proxyType = ProxyType.Http;

            switch (proxy.ProxyProtocol)
            {
            case ProxyProtocol.HTTP:
                proxyType = ProxyType.Http;
                break;

            case ProxyProtocol.SOCKS5:
                proxyType = ProxyType.Socks5;
                break;

            case ProxyProtocol.SOCKS4:
                proxyType = ProxyType.Socks4;
                break;

            case ProxyProtocol.SOCKS4A:
                proxyType = ProxyType.Socks4a;
                break;

            default:
                System.Windows.MessageBox.Show("Не установлен тип прокси.");
                return;
            }
            //устанавливаем прокси
            ProxyClient Client = ProxyHelper.CreateProxyClient(proxyType, proxy.Ip, Convert.ToInt32(proxy.Port), proxy.Login, proxy.Pwd);

            request.Proxy = Client;
        }
示例#2
0
        /// <summary>
        /// Общий метод для разных потоков на Get запрос с функцией дозированных запросов раз в  <paramref name="delay"/> мс и временем ожидания <paramref name="waitingTime"/>, в случае неудачного запроса
        /// </summary>
        /// <param name="request">Объект HttpRequest вызывающего потока</param>
        /// <param name="url">URL строка для  Get  запроса</param>
        /// <param name="delay">Время задержки между запросами в мс</param>
        /// <param name="waitingTime">Время ожидания не ошибочного ответа от сервера</param>
        /// <param name="setter">делегат передающий  сигналу задержки состояние true, означающий недавнее выполнение http get запроса</param>
        /// <param name="getter">делегат возвращающий текущее состояние сигнала разрешения задержки</param>
        /// <returns></returns>
        internal static string GetDosingRequests(HttpRequest request, string url, RequestParams rParams, int delay, int waitingTime, Action<bool> setter, FirstDelegate getter)
        {
            string resultPage = "";

            Stopwatch waitingWatch = new Stopwatch();
            waitingWatch.Start();
            while (String.IsNullOrEmpty(resultPage))
            {

                if (getter())
                {
                    //этой конструкцией выстраиваю потоки в очередь
                    lock (LockGetRequestObj)
                    {
                        Thread.Sleep(delay);
                    }
                }
                try
                {
                    setter(true);
                    resultPage = request.Get(url, rParams).ToString();
                    Console.WriteLine("request");
                }
                catch (Exception ex)
                {
                    if (waitingWatch.ElapsedMilliseconds > waitingTime && waitingTime != -1)
                        throw new Exception("Время ожидания вышло. Причина: \r\n" + ex.Message);
                    Thread.Sleep(5000);
                }
            }
            waitingWatch.Reset();
            return resultPage;
        }
示例#3
0
        /// <summary>
        /// Считает время ожидания ответа на запрос к http серверу
        /// </summary>
        /// <param name="address">Url адрес</param>
        /// <param name="maxRequestTime">Максимальное время ожидания ответа. -1 для бесконечного времени ожидания.</param>
        /// <returns>Время запроса в мс</returns>

        internal static int GetRequestTime(string address, RequestParams requestParams, int maxRequestTime, out Exception outEx)
        {
            int result = -1;
            Exception innerEx = null;
            using (var request = new HttpRequest())
            {
                request.UserAgent = HttpHelper.ChromeUserAgent();
                EventWaitHandle wh = new AutoResetEvent(false);
                var requestThread = new Thread(() =>
                {
                    var watch = new Stopwatch();
                    watch.Start();
                    try
                    {
                        string resultPage = request.Get(address, requestParams).ToString();
                    }
                    catch (Exception ex) { innerEx = ex; }
                    result = Convert.ToInt32(watch.ElapsedMilliseconds);
                    watch.Reset();
                    wh.Set();
                });
                requestThread.Start();
                var stoptimer = new System.Threading.Timer((Object state) =>
                {
                    requestThread.Abort();
                    wh.Set();
                }, null, maxRequestTime, Timeout.Infinite);
                wh.WaitOne();

                stoptimer.Dispose();
            }
            outEx = innerEx;
            return result;
        }
示例#4
0
        private async Task GetApteka(string search)
        {
            await Task.Run(async() =>
            {
                try
                {
                    var collection = new CookieDictionary();
                    var doc        = new HtmlDocument();
                    var req        = new HttpRequest
                    {
                        EnableAdditionalHeaders = true,
                        UserAgent             = HttpHelper.ChromeUserAgent(),
                        Cookies               = collection,
                        ["Accept"]            = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
                        AllowAutoRedirect     = true,
                        EnableEncodingContent = true,
                        CharacterSet          = Encoding.UTF8,
                        //Proxy = new HttpProxyClient("127.0.0.1", 8888),
                    };

                    req.AddParam("searchstr", search.ToLower());
                    req.AddParam("go", "Найти!");
                    req.AddParam("city", "Киев");

                    var resp = req.Post("http://medbrowse.com.ua/search").ToString();
                    if (resp.Contains("http://medbrowse.com.ua/oops/?hash"))
                    {
                        doc.LoadHtml(resp);
                        var postUrl = doc.DocumentNode.Descendants("form")
                                      .First()
                                      .GetAttributeValue("action", string.Empty);
                        var imgUrl   = doc.DocumentNode.Descendants("img").First().GetAttributeValue("src", string.Empty);
                        var imgBytes = req.Get(imgUrl).ToBytes();

                        await Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            var captcha = new Captcha(imgBytes);
                            if (captcha.ShowDialog() == true)
                            {
                                req.AddParam("code", captcha.TextResult);
                                resp = req.Post(postUrl).ToString();
                            }
                        }));
                    }

                    await WebCookies(req.Address.AbsoluteUri, collection);

                    return(new List <AptekaStruct>());
                }
                catch (Exception)
                {
                    return(new List <AptekaStruct>());
                }
            });
        }
示例#5
0
		//private const int KolRet = 5;

		private string MakeRequest(string url) // Get запрос
		{
			using (var request = new HttpRequest { UserAgent = HttpHelper.ChromeUserAgent(), Cookies = _cookie })
			{
				//for (var i = 0; i < KolRet; i++)
				//{
				return request.Get(url).ToString();
				//}

				//return "err ";	
			}
		}
示例#6
0
        public YandexParser(string name)
        {
            Name = name;

            CookieDictionary cookie = new CookieDictionary();
            request  = new HttpRequest();
            request.Cookies = cookie;
            urlPoisk = @"http://yandex.ru/yandsearch?text=";
            urlCheckCaptcha = @"http://yandex.ru/checkcaptcha";

            request.UserAgent = HttpHelper.OperaUserAgent();
        }
示例#7
0
        //Кол-во страниц
        private int GetCountPages()
        {
            int countPages = 0;
            string SourcePage;

            try
            {
                using (var Request = new HttpRequest())
                {
                    SourcePage = Request.Get("http://vegetarian.ru/forum/users/").ToString();
                    MessageBox.Show(SourcePage);
                    countPages = Convert.ToInt32(SourcePage.Substrings("/forum/users/?PAGEN_1=", "\">", 0)[4]);
                }
            } catch {}

            return countPages;
        }
示例#8
0
        private static string Check(string login, string password, string domain)
                    {
            try
            {
                using (var request = new HttpRequest())//http запрос
                {
                    if (Globals.TypeProxy == 1)//подключаем нужный тип прокси
                    {
                        request.Proxy = HttpProxyClient.Parse(GetProxy());
                    }
                    else if (Globals.TypeProxy == 2)
                    {
                        request.Proxy = Socks4ProxyClient.Parse(GetProxy());
                    }
                    else if (Globals.TypeProxy == 3)
                    {
                        request.Proxy = Socks5ProxyClient.Parse(GetProxy());
                    }

                    request.AllowAutoRedirect = false;//запретили редирект 
                    request.UserAgent = HttpHelper.RandomUserAgent();   //юзвер агент

                    HttpResponse response = request.Post("https://id.rambler.ru/login/iframe", "show=iframe&profile.login="******"&profile.domain="+ domain +"&profile.password="******"&button.submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8");
                    if (response.Cookies.ContainsKey("rha"))
                    {
                        return "true";
                    }
                    else
                    {
                        return "false";
                    }
                }

            }
            catch 
            {
                Check(login, password, domain);
            }
            return "";

       }
示例#9
0
        internal HttpResponse(HttpRequest request)
        {
            _request = request;

            ContentLength = -1;
            ContentType = string.Empty;
        }
示例#10
0
        /// <summary>
        /// Отправляет POST-запрос с Multipart/form данными. Загружает тело сообщения и возвращает его в виде текста.
        /// </summary>
        /// <param name="address">Адрес интернет-ресурса.</param>
        /// <param name="multipartData">Multipart/form данные, отправляемые 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"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="address"/> не является абсолютным URI.</exception>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="multipartData"/> равно <see langword="null"/>.</exception>
        /// <exception cref="xNet.Net.HttpException">Ошибка при работе с HTTP-протоколом.</exception>
        /// <exception cref="xNet.Net.ProxyException">Ошибка при работе с прокси-сервером.</exception>
        public static string Post(Uri address, MultipartDataCollection multipartData, CookieDictionary cookies = null, ProxyClient proxy = null)
        {
            using (HttpRequest request = new HttpRequest())
            {
                if (cookies == null)
                {
                    request.Cookies = new CookieDictionary();
                }
                else
                {
                    request.Cookies = cookies;
                }

                request.Proxy = proxy;
                request.KeepAlive = false;

                if (string.IsNullOrEmpty(HttpRequest.GlobalUserAgent))
                {
                    request.UserAgent = HttpHelper.RandomUserAgent();
                }

                return request.Post(address, multipartData).ToText();
            }
        }
示例#11
0
        /// <summary>
        /// Отправляет POST-запрос HTTP-серверу. Загружает тело сообщения и возвращает его в виде текста.
        /// </summary>
        /// <param name="address">Адрес интернет-ресурса.</param>
        /// <param name="messageBody">Тело сообщения, отправляемое 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"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="address"/> является пустой строкой.</exception>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="messageBody"/> равно <see langword="null"/>.</exception>
        /// <exception cref="xNet.Net.HttpException">Ошибка при работе с HTTP-протоколом.</exception>
        /// <exception cref="xNet.Net.ProxyException">Ошибка при работе с прокси-сервером.</exception>
        /// <remarks>Если значение заголовка 'Content-Type' не задано, то отправляется значение 'Content-Type: application/x-www-form-urlencoded'.</remarks>
        public static string Post(string address, byte[] messageBody, CookieDictionary cookies = null, ProxyClient proxy = null)
        {
            using (HttpRequest request = new HttpRequest())
            {
                if (cookies == null)
                {
                    request.Cookies = new CookieDictionary();
                }
                else
                {
                    request.Cookies = cookies;
                }

                request.Proxy = proxy;
                request.KeepAlive = false;

                if (string.IsNullOrEmpty(HttpRequest.GlobalUserAgent))
                {
                    request.UserAgent = HttpHelper.RandomUserAgent();
                }

                return request.Post(address, messageBody).ToText();
            }
        }
示例#12
0
        /// <summary>
        /// Отправляет HEAD-запрос HTTP-серверу.
        /// </summary>
        /// <param name="address">Адрес интернет-ресурса.</param>
        /// <param name="reqParams">Параметры запроса, отправляемые HTTP-серверу.</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"/> не является абсолютным URI.</exception>
        /// <exception cref="xNet.Net.HttpException">Ошибка при работе с HTTP-протоколом.</exception>
        /// <exception cref="xNet.Net.ProxyException">Ошибка при работе с прокси-сервером.</exception>
        public static void Head(Uri address, StringDictionary reqParams, CookieDictionary cookies = null, ProxyClient proxy = null)
        {
            using (HttpRequest request = new HttpRequest())
            {
                if (cookies == null)
                {
                    request.Cookies = new CookieDictionary();
                }
                else
                {
                    request.Cookies = cookies;
                }

                request.Proxy = proxy;
                request.KeepAlive = false;

                if (string.IsNullOrEmpty(HttpRequest.GlobalUserAgent))
                {
                    request.UserAgent = HttpHelper.RandomUserAgent();
                }

                request.Head(address, reqParams).None();
            }
        }
示例#13
0
 /// <summary>
 /// Вызывается перед отправкой данных.
 /// </summary>
 /// <param name="request">Запрос, который отсылает текущий контент.</param>
 /// <param name="writeBytesCallback">Метод обратного вызова для записи байтов контента в поток.</param>
 public virtual void Init(HttpRequest request, Action<byte[], int> writeBytesCallback)
 {
     _request = request;
     _writeBytesCallback = writeBytesCallback;
 }
示例#14
0
        /// <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="System.ArgumentException">Значение параметра <paramref name="address"/> не является абсолютным URI.</exception>
        /// <exception cref="xNet.Net.HttpException">Ошибка при работе с HTTP-протоколом.</exception>
        /// <exception cref="xNet.Net.ProxyException">Ошибка при работе с прокси-сервером.</exception>
        public static string GetText(Uri address, StringDictionary urlParams, 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;

                if (string.IsNullOrEmpty(HttpRequest.GlobalUserAgent))
                {
                    request.UserAgent = HttpHelper.RandomUserAgent();
                }

                return request.Get(address, urlParams).ToString();
            }
        }
示例#15
0
        private static async Task <List <InfoStruct> > GetInfo(string search)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    var doc = new HtmlDocument();
                    var req = new HttpRequest
                    {
                        EnableAdditionalHeaders = true,
                        UserAgent = HttpHelper.ChromeUserAgent(),
                        Cookies = new CookieDictionary(),
                        //Proxy = new HttpProxyClient("127.0.0.1", 8888),
                        ["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
                    };

                    var newSearch =
                        HttpUtility.UrlEncode(search, Encoding.GetEncoding("windows-1251"));

                    var respBytes = req.Get("http://mozdocs.kiev.ua/liki.php").ToBytes();
                    var resp = Encoding.GetEncoding("windows-1251").GetString(respBytes);

                    if (resp.Contains("http://mozdocs.kiev.ua/oops/?hash"))
                    {
                        resp = Encoding.UTF8.GetString(respBytes);
                        doc.LoadHtml(resp);
                        var postUrl = doc.DocumentNode.Descendants("form")
                                      .First()
                                      .GetAttributeValue("action", string.Empty);
                        var imgUrl = doc.DocumentNode.Descendants("img").First().GetAttributeValue("src", string.Empty);
                        var imgBytes = req.Get(imgUrl).ToBytes();

                        await Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            var captcha = new Captcha(imgBytes);
                            if (captcha.ShowDialog() == true)
                            {
                                req.AddParam("code", captcha.TextResult);

                                respBytes = req.Post(postUrl).ToBytes();
                                resp = Encoding.GetEncoding("windows-1251").GetString(respBytes);
                            }
                        }));
                    }

                    respBytes =
                        req.Get(
                            $"http://mozdocs.kiev.ua/liki.php?name={newSearch}&lang=1&manufacturer=&category=0&likform=0&pokaz=&atcode=&go=%CF%EE%F8%F3%EA&nav=1&hf=1&am=")
                        .ToBytes();
                    resp = Encoding.GetEncoding("windows-1251").GetString(respBytes);

                    var url = await ParsingInfo.GetUrl(resp, search);
                    if (string.IsNullOrEmpty(url))
                    {
                        throw new Exception();
                    }

                    respBytes = req.Get(url).ToBytes();
                    resp = Encoding.GetEncoding("windows-1251").GetString(respBytes);

                    if (resp.Contains("http://mozdocs.kiev.ua/oops/?hash"))
                    {
                        resp = Encoding.UTF8.GetString(respBytes);
                        doc.LoadHtml(resp);
                        var postUrl = doc.DocumentNode.Descendants("form")
                                      .First()
                                      .GetAttributeValue("action", string.Empty);
                        var imgUrl = doc.DocumentNode.Descendants("img").First().GetAttributeValue("src", string.Empty);
                        var imgBytes = req.Get(imgUrl).ToBytes();

                        await Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            var captcha = new Captcha(imgBytes);
                            if (captcha.ShowDialog() == true)
                            {
                                req.AddParam("code", captcha.TextResult);

                                respBytes = req.Post(postUrl).ToBytes();
                                resp = Encoding.GetEncoding("windows-1251").GetString(respBytes);
                            }
                        }));
                    }

                    return await ParsingInfo.GetResult(resp);
                }
                catch (Exception)
                {
                    return new List <InfoStruct> {
                        new InfoStruct {
                            FarmVlast = "Нічого не знайдено."
                        }
                    };
                }
            }));
        }
示例#16
0
        /// <summary>
        /// Отправляет Post запрос на сайт белтелекома с параметрами <paramref name="parametrs"/>/>
        /// </summary>
        /// <param name="parametrs">Параметры запроса</param>
        /// <returns>html страницу</returns>
        private string GetHtmlContent(RequestParams parametrs)
        {
            string htmlContent = "";
            using (var request = new HttpRequest())
            {
                request.UserAgent = HttpHelper.ChromeUserAgent();
                request.EnableAdditionalHeaders = true;
                request.EnableEncodingContent = true;

                try
                {
                    request.Cookies = _cookies;
                    htmlContent = request.Post(Consts._BELTELECOM_URL, parametrs).ToString();
                    _cookies = request.Cookies;
                }
                catch (Exception ex)
                {
                    _log.Error(ex.Message);
                    ErrorMessage = ex.Message;
                }
            }
            return htmlContent;
        }