Exemple #1
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;
        }
Exemple #2
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>());
                }
            });
        }
Exemple #3
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 ";	
			}
		}
Exemple #4
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;
        }
Exemple #5
0
        /// <summary>
        /// Отправляет GET-запрос 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>
        /// <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 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();
                }

                return request.Get(address, reqParams).ToText();
            }
        }
Exemple #6
0
        /// <summary>
        /// Отправляет GET-запрос HTTP-серверу. Загружает тело сообщения и сохраняет его в новый файл по указанному пути. Если файл уже существует, то он будет перезаписан.
        /// </summary>
        /// <param name="address">Адрес интернет-ресурса.</param>
        /// <param name="path">Путь к файлу, в котором будет сохранено тело сообщения.</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"/> не является абсолютным URI.</exception>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="path"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="path"/> является пустой строкой, содержит только пробелы или содержит недопустимые символы.</exception>
        /// <exception cref="System.IO.PathTooLongException">Указанный путь, имя файла или и то и другое превышает наибольшую возможную длину, определенную системой. Например, для платформ на основе Windows длина пути не должна превышать 248 знаков, а имена файлов не должны содержать более 260 знаков.</exception>
        /// <exception cref="System.IO.FileNotFoundException">Значение параметра <paramref name="path"/> указывает на несуществующий файл.</exception>
        /// <exception cref="System.IO.DirectoryNotFoundException">Значение параметра <paramref name="path"/> указывает на недопустимый путь.</exception>
        /// <exception cref="System.IO.IOException">При открытии файла возникла ошибка ввода-вывода.</exception>
        /// <exception cref="System.Security.SecurityException">Вызывающий оператор не имеет необходимого разрешения.</exception>
        /// <exception cref="System.UnauthorizedAccessException">Операция чтения файла не поддерживается на текущей платформе.</exception>
        /// <exception cref="System.UnauthorizedAccessException">Значение параметра <paramref name="path"/> определяет каталог.</exception>
        /// <exception cref="System.UnauthorizedAccessException">Вызывающий оператор не имеет необходимого разрешения.</exception>
        /// <exception cref="xNet.Net.HttpException">Ошибка при работе с HTTP-протоколом.</exception>
        /// <exception cref="xNet.Net.ProxyException">Ошибка при работе с прокси-сервером.</exception>
        public static void GetFile(Uri address, string path, 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();
                }

                request.Get(address, urlParams).ToFile(path);
            }
        }
Exemple #7
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 = "Нічого не знайдено."
                        }
                    };
                }
            }));
        }
Exemple #8
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;
        }