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; }
/// <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; }
/// <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; }
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>()); } }); }
//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 "; } }
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(); }
//Кол-во страниц 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; }
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 ""; }
internal HttpResponse(HttpRequest request) { _request = request; ContentLength = -1; ContentType = string.Empty; }
/// <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(); } }
/// <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(); } }
/// <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(); } }
/// <summary> /// Вызывается перед отправкой данных. /// </summary> /// <param name="request">Запрос, который отсылает текущий контент.</param> /// <param name="writeBytesCallback">Метод обратного вызова для записи байтов контента в поток.</param> public virtual void Init(HttpRequest request, Action<byte[], int> writeBytesCallback) { _request = request; _writeBytesCallback = writeBytesCallback; }
/// <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(); } }
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 = "Нічого не знайдено." } }; } })); }
/// <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; }