Пример #1
0
        public virtual IList<Tour> Create(IPttRequest request, IOperator op, out TourFactoryStatus status)
        {
            if (op.ExtensiveLoggingNeeded)
            {
                Logger.LogProcess("TourFactory.Create trying to get html for " + request.Url + " with postdata:"+request.PostValue);
            }

            var htmlSource = op.RequestResponseBehavior.GetHtmlMaster(request, false, op.ExtensiveLoggingNeeded, op.Name);
            if(op.ExtensiveLoggingNeeded)
            {
                Logger.LogProcess("TourFactory.Create Html coming from htmlmaster");
                Logger.LogProcess(htmlSource ?? "");
            }
            if (string.IsNullOrEmpty(htmlSource))
            {
                status = new TourFactoryStatus { Success = false };
                return null;
            }

            var htmlSourceRefined = op.Refine(request, htmlSource);
            if (op.ExtensiveLoggingNeeded)
            {
                Logger.LogProcess("TourFactory.Create Html refined");
                Logger.LogProcess(htmlSourceRefined ?? "");
            }
            var html = new HtmlDocument();
            html.LoadHtml(htmlSourceRefined);
            var list = GetToursFromHtml(request, op, html, out status);
            return list;
        }
Пример #2
0
        public IPttRequest RequestWithCaptchaValue(IPttRequest request, IPttCaptcha pttCaptcha)
        {
            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(request.Response);

            var challengeField = htmlDoc.DocumentNode.SelectSingleNode("//input[@id='recaptcha_challenge_field']");
            if (challengeField == null)
            {
                return null;
            }
            var challengeFieldValue = challengeField.Attributes["value"].Value;

            var pttRequestFactory = new PttRequestFactory(request);
            var newReq = pttRequestFactory.Deserialize(string.Format("<Request><Url>{0}</Url><Method>POST</Method></Request>", request.Url));

            newReq.PostValue = string.Format("recaptcha_challenge_field={0}&recaptcha_response_field={1}&submit=I%27m+a+human", challengeFieldValue, pttCaptcha.Value ?? "");
            newReq.WrappedRequest.ContentType = "application/x-www-form-urlencoded";

            var pttResponse = new PttResponse();
            //bu gelen htmlsource dan textarea degerini oku
            htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(pttResponse.GetResponse(newReq));
            var valueToPasteNode = htmlDoc.DocumentNode.SelectSingleNode("//textarea");
            if (valueToPasteNode == null)
            {
                return null;
            }

            return null;
        }
Пример #3
0
        public override string GetHtml(IPttRequest request, bool forHotelList)
        {
            if (_extensiveLoggingNeeded)
            {
                Logger.LogProcess("RequestResponseWithCaptcha gethtml coming request: " + request);
            }
            IPttResponse response = new PttResponse();
            var htmlSource = response.GetResponse(request);
            if(_extensiveLoggingNeeded)
            {
                Logger.LogProcess("RequestResponseWithCaptcha gethtml: "+ htmlSource);
            }
            if (!_captchaRequestResponse.CaptchaShown(htmlSource))
            {
                if (_extensiveLoggingNeeded)
                {
                    Logger.LogProcess("RequestResponseWithCaptcha captcha not shown, returning");
                }

                return htmlSource;
            }

            if (_extensiveLoggingNeeded)
            {
                Logger.LogProcess("RequestResponseWithCaptcha captcha shown");
            }
            return CaptchaPassedResult(request, htmlSource);
        }
Пример #4
0
        public IPttCaptcha CaptchaImage(IPttRequest request, string htmlSource)
        {
            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(htmlSource);
            var iframe = htmlDoc.DocumentNode.SelectSingleNode("//iframe");
            if (iframe == null)
            {
                return null;
            }
            var iframeSrc = iframe.Attributes["src"].Value;

            var newRequest = new PttRequest(iframeSrc) {WrappedRequest = {ContentType = "text/html", Method = "GET"}};
            IPttResponse response = new PttResponse();
            var captchaFormHtml = response.GetResponse(newRequest);

            htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(captchaFormHtml);
            var captchaImg = htmlDoc.DocumentNode.SelectSingleNode("//img");
            if (captchaImg == null)
            {
                return null;
            }
            var captchaSrc = string.Format("http://{0}/recaptcha/api/{1}", googleHost, captchaImg.Attributes["src"].Value);

            return new PttCaptcha() { Url = captchaSrc, RequestUsed = newRequest, FormUrl = iframeSrc};
        }
Пример #5
0
        public override string GetHtml(IPttRequest request, bool forHotelList)
        {
            var proxy = WebHelper.GetProxyForOperator(_name);

            var natCap = new NatCap();
            //phantomerror
            var html = natCap.GrabForOperator(request.Url, _name, proxy == null ? "" : proxy.Item1 + ":" + proxy.Item2, new CultureInfo("ru-RU").Name);
            if (_captchaRequestResponse.CaptchaShown(html))
            {
                Logger.LogProcess("Natalie Captcha shown...");
            }
            if (html.Contains("###MAXCAPTCHAEXCEEDED###"))
            {
                Logger.LogProcess("NATCAP: MAX CAPTCHA EXCEEDED");
                return null;
            }
            if (html.Contains("###404###"))
            {
                Logger.LogProcess("NATCAP: 404");
                return null;
            }

            if (html.Contains("###BLOCKED###"))
            {
                Logger.LogProcess("NATCAP: IP BLOCKED " + (proxy==null?"":proxy.Item1));
                return null;
            }
            if (html.Contains("###CAPTCHASHOWN###"))
            {
                Logger.LogProcess("NATCAP: captcha shown");
                return null;
            }
            return html;
        }
Пример #6
0
 public IPttRequest RequestWithCaptchaValue(IPttRequest request, IPttCaptcha pttCaptcha)
 {
     var pttRequestFactory = new PttRequestFactory(request);
     var newReq = pttRequestFactory.Deserialize(string.Format("<Request><Url>{0}</Url><Method>POST</Method><Referer>{0}</Referer></Request>", request.Url));
     newReq.WrappedRequest.ContentType = "application/x-www-form-urlencoded";
     newReq.PostValue = Regex.Replace(request.PostValue, @"packageSearchCaptcha=[^&]*&", "packageSearchCaptcha=" + pttCaptcha.Value + "&");
     return newReq;
 }
Пример #7
0
 /// <summary>
 /// new but proxy and cookie, eventvalidation and cookiecontainer  taken by request
 /// </summary>
 /// <param name="request"></param>
 public PttRequestFactory(IPttRequest request, bool keepAliveDefaultValue=true)
 {
     _proxy = request.Proxy;
     _cookieContainer = request.CookieContainer;
     _viewStateValue = request.ViewStateValue;
     _eventValidationValue = request.EventValidationValue;
     _keepAliveDefaultValue = keepAliveDefaultValue;
 }
Пример #8
0
        public IPttRequest RequestWithCaptchaValue(IPttRequest request, IPttCaptcha pttCaptcha)
        {
            var pttRequestFactory = new PttRequestFactory(request);
            var newReq = pttRequestFactory.Deserialize(string.Format("<Request><Url>{0}</Url><Method>POST</Method></Request>", request.Url));

            newReq.PostValue = "samo_action=antibot&are_you_human=" + pttCaptcha.Value;
            newReq.WrappedRequest.ContentType = "application/x-www-form-urlencoded";
            return newReq;
        }
Пример #9
0
 public override IList<Tour> Create(IPttRequest request, IOperator op, out TourFactoryStatus status)
 {
     if(!Biblo.TourDates.Contains(op.QueryObject.StartDate))
     {
         status = new TourFactoryStatus { Success = true, MoveToNextHotel = true};
         return null;
     }
     return base.Create(request, op, out status);
 }
Пример #10
0
        /// <summary>
        /// the god-wrapper for gethml functions
        /// </summary>
        public virtual string GetHtmlMaster(IPttRequest request, bool forHotelList, bool extensiveLoggingNeeded = false, string operatorName=null)
        {
            PttWebRequest pttWebRequest = null;
            var unsuccesfullTries = 0;
            while (true)
            {
                try
                {
                    string result = "";
                    if (extensiveLoggingNeeded)
                    {
                        Logger.LogProcess("GetHtmlMaster try #" + (unsuccesfullTries + 1) + " for request:" + request);
                    }
                    if (pttWebRequest==null)
                    {
                        pttWebRequest = PttWebRequest.Create(request.WrappedRequest);
                    }
                    var requestToUse = request;
                    if (unsuccesfullTries > 0)
                    {
                        requestToUse = request.Clone(pttWebRequest);
                        IWebProxy proxy = new WebProxy();
                        WebHelper.ArrangeProxy(ref proxy, operatorName);
                        requestToUse.Proxy = proxy;
                    }

                    result = GetHtml(requestToUse, forHotelList);

                    if (_retryNeededForRequest(result))
                    {
                        if (extensiveLoggingNeeded)
                        {
                            Logger.LogProcess("Retry needed for try #" + (unsuccesfullTries + 1) + " for request:" + request);
                        }
                        throw new Exception("Retry needed!");
                    }
                    if (extensiveLoggingNeeded)
                    {
                        Logger.LogProcess("GetHtmlMaster no more retry needed for request:" + request);
                    }
                    return result;
                }
                catch (Exception exc)
                {
                    if (_tryAgainInException.Item1 == 0)
                    {
                        throw exc;
                    }
                    unsuccesfullTries++;
                    Thread.Sleep(TimeSpan.FromSeconds(_tryAgainInException.Item2));
                    if (unsuccesfullTries == _tryAgainInException.Item1)
                    {
                        throw exc;
                    }
                }
            }
        }
Пример #11
0
 public IPttCaptcha CaptchaImage(IPttRequest request, string htmlSource)
 {
     return new PttCaptcha()
                {
                    Base64Content = htmlSource.TrimMiddleWithLeftCalc("PackageSearch.CaptchaImageBuffer=\"", "\"").Replace(
                            "data:image/png;base64,", ""),
                            IsBase64 = true
                };
 }
Пример #12
0
        public IPttCaptcha CaptchaImage(IPttRequest request, string htmlSource)
        {
            var html = new HtmlDocument();
            html.LoadHtml(htmlSource);
            var captchaImage = html.DocumentNode.SelectSingleNode("//img[@id='icaptcha']");
            if (captchaImage == null)
            {
                return new PttCaptcha() { Url = _defaultCaptchUrl };

            }
            return new PttCaptcha() {Url = captchaImage.Attributes["src"].Value};
        }
Пример #13
0
 protected override void FillSessionJar(IPttRequest request, int requestCounter)
 {
     if (request.RequestType != PttRequestType.Init) return;
     var dateToSelectStr = DatesToSelect(QueryObject.StartDate, request.Url, request.Response);
     TourDates = dateToSelectStr;
     var firstDate = DateTime.Today.ToString("d", new CultureInfo("ru-RU"));
     var lastDate = DateTime.Today.ToString("d", new CultureInfo("ru-RU"));
     if (dateToSelectStr.Any())
     {
         firstDate = dateToSelectStr.First().ToString("d", new CultureInfo("ru-RU"));
         lastDate = dateToSelectStr.Last().ToString("d", new CultureInfo("ru-RU"));
     }
     request.SessionJar.AddOrUpdate("firstDate", firstDate, (k, v) => firstDate);
     request.SessionJar.AddOrUpdate("lastDate", lastDate, (k, v) => lastDate);
 }
Пример #14
0
 private TourFactoryControlFlags BeforeIteratingWhileGettingTours(IPttRequest request, HtmlDocument htmlDocument)
 {
     var totalPageCountNode = htmlDocument.DocumentNode.SelectNodes("//span['_Pager2_LbHeader' = substring(@id, string-length(@id) - 15)]");
     var totalPageCount = 1;
     if (totalPageCountNode != null && totalPageCountNode.Any())
     {
         var match = Regex.Match(totalPageCountNode[0].InnerText, @"(\d)", RegexOptions.IgnoreCase);
         if (match.Success)
         {
             string pageCount = match.Groups[1].Value;
             Int32.TryParse(pageCount, out totalPageCount);
         }
     }
     return totalPageCount == PageIndex - 1 ? TourFactoryControlFlags.MoveToNextHotel : TourFactoryControlFlags.Pass;
 }
 /// <summary>
 /// the god-wrapper for gethml functions
 /// </summary>
 public override string GetHtmlMaster(IPttRequest request, bool forHotelList, bool extensiveLoggingNeeded = false,
     string operatorName = null)
 {
     if (forHotelList && request.RequestType == PttRequestType.Init)
     {
         try
         {
             return base.GetHtmlMaster(request, forHotelList, extensiveLoggingNeeded, operatorName);
         }
         catch
         {
             return null;
         }
     }
     return base.GetHtmlMaster(request, forHotelList, extensiveLoggingNeeded, operatorName);
 }
        public override string GetHtml(IPttRequest request, bool forHotelList)
        {
            var proxy = WebHelper.GetProxyForOperator(_name);

            var phantomJs = new PhantomJs();
            //phantomerror
            var html = phantomJs.GrabForOperator(request.Url, _name, proxy == null ? "" : proxy.Item1 + ":" + proxy.Item2, new CultureInfo("ru-RU").Name);
            if (_captchaRequestResponse.CaptchaShown(html))
            {
                Logger.LogProcess("Natalie Captcha shown...");
            }
            if ("phantomerror" == html)
            {
                Logger.LogProcess("Phantom error...");
                return null;
            }
            return html;
        }
Пример #17
0
        protected override void FillSessionJar(IPttRequest request, int requestCounter)
        {
            if (requestCounter != 2) return;
            if (string.IsNullOrEmpty(request.Response)) return;

            double rate = 0.0;

            var html = new HtmlDocument();
            html.LoadHtml(request.Response);
            var curr = html.DocumentNode.SelectSingleNode("//span[@class='eurRate']");
            if (curr == null) return;

            var match = Regex.Match(curr.InnerText, @"(\d+),(\d+)", RegexOptions.IgnoreCase);
            if (!match.Success) return;

            var integerPart = match.Groups[1].Value;
            var floatingPart = match.Groups[2].Value;
            Double.TryParse(integerPart + "." + floatingPart, NumberStyles.AllowDecimalPoint, new CultureInfo("en-US"), out rate);

            request.SessionJar.AddOrUpdate("EurRate", rate, (k, v) => rate);
        }
Пример #18
0
 public override string Refine(IPttRequest pttRequest, string htmlSource)
 {
     return htmlSource.TrimMiddle(DATA_START, DATA_END,true);
 }
Пример #19
0
 public override string Refine(IPttRequest pttRequest, string htmlSource)
 {
     var arrayToXmlConverter = new JSONArrayToXmlConverter();
     return arrayToXmlConverter.ToXml(htmlSource);
 }
Пример #20
0
 public virtual string GetHtml(IPttRequest request, bool forHotelList)
 {
     IPttResponse response = new PttResponse();
     var htmlSource = response.GetResponse(request);
     return htmlSource;
 }
Пример #21
0
        protected string CaptchaPassedResult(IPttRequest request, string htmlSource)
        {
            IPttResponse response = new PttResponse();
            var html = htmlSource;
            var captchaTries = 1;
            while (true)
            {
                var pttCaptcha = _captchaRequestResponse.CaptchaImage(request, html);

                if (_extensiveLoggingNeeded)
                {
                    Logger.LogProcess("RequestResponseWithCaptcha CaptchaPassedResult coming captcha:"+ pttCaptcha);
                }

                try
                {
                    var captchaResolve = ResolveCaptcha(request, pttCaptcha, captchaTries);
                    pttCaptcha.Value = captchaResolve.Item1;
                    pttCaptcha.FileNameInTempDir = captchaResolve.Item2;

                    if (_extensiveLoggingNeeded)
                    {
                        Logger.LogProcess("RequestResponseWithCaptcha CaptchaPassedResult after resolving:" + pttCaptcha);
                    }

                }
                catch (Exception exc)
                {
                    Logger.LogExceptions(exc);
                    return null;
                }
                IPttRequest captchaAddedRequest = _captchaRequestResponse.RequestWithCaptchaValue(request, pttCaptcha);
                if(_extensiveLoggingNeeded)
                {
                    Logger.LogProcess("RequestResponseWithCaptcha CaptchaPassedResult captchaAddedRequest:"+captchaAddedRequest);
                }
                var captchaPassedResult = response.GetResponse(captchaAddedRequest);
                captchaAddedRequest.WrappedRequest = null;
                GC.Collect();

                if (_extensiveLoggingNeeded)
                {
                    Logger.LogProcess("RequestResponseWithCaptcha CaptchaPassedResult captchaPassedResult:" + captchaPassedResult);
                }
                if (_captchaRequestResponse.RepeatFirstRequest)
                {
                    var pttRequestFactory = new PttRequestFactory(request);
                    var firstRequest = pttRequestFactory.Deserialize(string.Format("<Request><Url>{0}</Url><Host>www.tez-tour.com</Host><Referer> <![CDATA[http://www.tez-tour.com]]></Referer></Request>", request.Url));

                    if (_extensiveLoggingNeeded)
                    {
                        Logger.LogProcess("RequestResponseWithCaptcha CaptchaPassedResult RepeatFirstRequest firstrequest:" + firstRequest);
                    }
                    captchaPassedResult = response.GetResponse(firstRequest);
                }

                if (_captchaRequestResponse.CaptchaShown(captchaPassedResult))
                {
                    Logger.LogProcess(string.Format("Incorrect captcha for {0}", pttCaptcha.FileNameInTempDir));
                    html = captchaPassedResult;
                    captchaTries++;
                    continue;
                }
                Logger.LogProcess(string.Format("Correct captcha for {0}", pttCaptcha.FileNameInTempDir));

                return captchaPassedResult;
            }
        }
Пример #22
0
 protected byte[] CaptchaImageBytes(IPttRequest request, string imageSource)
 {
     IPttRequestFactory pttRequestFactory = new PttRequestFactory(request, false);
     IPttResponse response = new PttResponse();
     return response.GetResponseBytes(pttRequestFactory.SimpleRequest(imageSource));
 }
Пример #23
0
 protected Tuple<string, string> ResolveCaptcha(IPttRequest request, IPttCaptcha captcha, int captchaTries)
 {
     var captchaFileName = DownloadCaptchaImage(request, captcha);
     var captchaValue = _captchaBreaker.Guess(captchaFileName, captchaTries);
     return new Tuple<string, string>(captchaValue, captchaFileName);
 }
Пример #24
0
        protected string DownloadCaptchaImage(IPttRequest request, IPttCaptcha captcha)
        {
            CaptchaHelper.CreateCaptchasFolder();
            var captchaFileName = CaptchaHelper.NewCaptchaFileName();
            //Logger.LogProcess("gelen captcha dosya adi:" + captchaFileName);
            var captchaImageBytes = captcha.IsBase64 ? Convert.FromBase64String(captcha.Base64Content) : CaptchaImageBytes(request, captcha.Url);

            var fs = new FileStream(captchaFileName, FileMode.Create);
            var bw = new BinaryWriter(fs);
            bw.Write(captchaImageBytes);
            fs.Close();
            bw.Close();
            return captchaFileName;
        }
Пример #25
0
        protected virtual IList<Tour> GetToursFromHtml(IPttRequest request, IOperator op, HtmlDocument html, out TourFactoryStatus status)
        {
            status = new TourFactoryStatus { Success = true, MoveToNextHotel = false };

            if (html.DocumentNode.SelectNodes(op.TourInfo.XPath) == null)
            {
                if (op.ExtensiveLoggingNeeded)
                {
                    Logger.LogProcess("TourFactory.GetToursFromHtml xpath node selection returns no nodes");
                }
                status.MoveToNextHotel = true;
                return null;
            }

            if (_beforeIteratingWhileGettingTours != null)
            {
                var ret = _beforeIteratingWhileGettingTours(request, html);
                if (op.ExtensiveLoggingNeeded)
                {
                    Logger.LogProcess("TourFactory.GetToursFromHtml _beforeIteratingWhileGettingTours  flags:"+ret.ToString());
                }
                status.MoveToNextHotel = status.MoveToNextHotel || ret.HasFlag(TourFactoryControlFlags.MoveToNextHotel);
                if (ret.HasFlag(TourFactoryControlFlags.Return))
                {
                    return null;
                }
            }

            var list = new List<Tour>();
            foreach (HtmlNode node in html.DocumentNode.SelectNodes(op.TourInfo.XPath))
            {
                if (_iteratingWhileGettingToursBeforeTourItemSet != null)
                {
                    var ret = _iteratingWhileGettingToursBeforeTourItemSet(request, node);
                    if (op.ExtensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TourFactory.GetToursFromHtml _iteratingWhileGettingToursBeforeTourItemSet  flags:" + ret.ToString());
                    }
                    status.MoveToNextHotel = status.MoveToNextHotel || ret.HasFlag(TourFactoryControlFlags.MoveToNextHotel);
                    if (ret.HasFlag(TourFactoryControlFlags.Continue))
                    {
                        continue;
                    }
                    if (ret.HasFlag(TourFactoryControlFlags.Break))
                    {
                        break;
                    }
                    if (ret.HasFlag(TourFactoryControlFlags.Return))
                    {
                        return null;
                    }
                }

                var tourItem = new Tour();

                tourItem.City = Dictionnaries.Regions[op.QueryObject.OriginId];
                tourItem.TO = op.Name.Replace("_", "");//anex_ gibiler icin
                tourItem.IssueDate = DateTime.Now;

                tourItem.Date = op.TourInfo.GetFieldValue<DateTime>(node, "Date");
                tourItem.Night = op.TourInfo.GetFieldValue<string>(node, "Night");
                tourItem.Hotel = op.TourInfo.GetFieldValue<string>(node, "Hotel");
                tourItem.RoomType = op.TourInfo.GetFieldValue<string>(node, "RoomType");
                tourItem.ACC = op.TourInfo.GetFieldValue<string>(node, "Accomodation");
                tourItem.Price = op.TourInfo.GetFieldValue<Double>(node, "Price");

                var meal = op.TourInfo.GetFieldValue<string>(node, "Meal");
                var mealTypeIndex = 7;
                var innerMealIndex = 0;
                foreach (var mealtypeAlternative in op.MealTypes)
                {
                    if (mealtypeAlternative.Contains(meal))
                    {
                        mealTypeIndex = innerMealIndex;
                        break;
                    }
                    innerMealIndex++;
                }
                tourItem.Meal = Dictionnaries.MealTypes[mealTypeIndex];
                tourItem.SPONo = op.TourInfo.GetFieldValue<string>(node, "SPONo");

                if (_iteratingWhileGettingToursAfterTourItemSet != null)
                {
                    var ret = _iteratingWhileGettingToursAfterTourItemSet(request, tourItem);
                    if (op.ExtensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TourFactory.GetToursFromHtml _iteratingWhileGettingToursAfterTourItemSet  flags:" + ret.ToString());
                    }

                    status.MoveToNextHotel = status.MoveToNextHotel || ret.HasFlag(TourFactoryControlFlags.MoveToNextHotel);
                    if (ret.HasFlag(TourFactoryControlFlags.Continue))
                    {
                        continue;
                    }
                    if (ret.HasFlag(TourFactoryControlFlags.Break))
                    {
                        break;
                    }
                    if (ret.HasFlag(TourFactoryControlFlags.Return))
                    {
                        return null;
                    }
                }
                if (op.QueryObject != null && tourItem.Price < op.QueryObject.MinPrice)
                {
                    if (op.ExtensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TourFactory.GetToursFromHtml tour info found but less than minprice:" + tourItem.Price);
                    }
                    continue;
                }

                if (op.QueryObject != null && (op.QueryObject.MealType == mealTypeIndex || op.QueryObject.MealType == 0))
                {
                    if (op.ExtensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TourFactory.GetToursFromHtml tour info added:" + tourItem.ToString());
                    }

                    list.Add(tourItem);
                }
                else
                {
                    if (op.ExtensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TourFactory.GetToursFromHtml tour info found but excluded bcz of meal type:" + mealTypeIndex);
                    }

                }
            }
            return list;
        }
Пример #26
0
 public byte[] GetResponseBytes(IPttRequest request)
 {
     byte[] content;
     using (var response = (HttpWebResponse)request.WrappedRequest.GetResponse())
     {
         using (var data = response.GetResponseStream())
         {
             using (var reader = new StreamReader(data))
             {
                 using (var br = new BinaryReader(data))
                 {
                     content = br.ReadBytes(500000);
                     br.Close();
                 }
                 //request.WrappedRequest.CookieContainer.Add(response.Cookies);
                 reader.Close();
             }
             data.Flush();
             data.Close();
         }
         response.Close();
         request.WrappedRequest.Abort();
         request.WrappedRequest = null;
         GC.Collect();
     }
     return content;
 }
Пример #27
0
        public string GetResponse(IPttRequest request)
        {
            PrepareForPost(request);

            try
            {
                string result = "";
                using (var response = (HttpWebResponse)request.WrappedRequest.GetResponse())
                {
                    if ((int)response.StatusCode >= 300 && (int)response.StatusCode <= 399)
                    {
                        //redirection varsa request url sini degistirt
                        var uriString = response.Headers["Location"];
                        var pttRequestFactory = new PttRequestFactory(request);
                        var newRequest = pttRequestFactory.Deserialize(string.Format("<Request><Url>{0}</Url><Method>GET</Method><Host>{1}</Host><Referer><![CDATA[{2}]]></Referer></Request>", uriString, request.WrappedRequest.Host, request.WrappedRequest.Referer));
                        request.Response = "Redirect";
                        response.Close();
                        Logger.LogProcess("PttResponse GetResponse url redirect newRequest:" + newRequest);
                        return GetResponse(newRequest);
                    }

                    //http://stackoverflow.com/questions/227575/encoding-problem-with-httpwebresponse
                    var charset = response.CharacterSet;
                    var encoding = Encoding.Default;
                    if (!string.IsNullOrEmpty(charset)) encoding = Encoding.GetEncoding(charset);

                    if (!request.Chunked)
                    {
                        //request.WrappedRequest.CookieContainer.Add(response.Cookies);//buna gerek yok gibi, request.Cookies ile debug edince GetResponse da cookiler otomatik olarak doluyor zaten
                        using (var respStream = response.GetResponseStream())
                        {
                            respStream.ReadTimeout = 1000;
                            using (var sr = new StreamReader(respStream, encoding))
                            {
                                result = sr.ReadToEnd();
                                sr.Close();
                            }
                            response.Close();
                            request.Response = result;
                            return result;
                        }
                    }
                    else
                    {
                        var sb = new StringBuilder();
                        var buf = new byte[8192];

                        using (var resStream = response.GetResponseStream())
                        {
                            int count;
                            do
                            {
                                count = resStream.Read(buf, 0, buf.Length);
                                if (count == 0) continue;

                                var tmpString = encoding.GetString(buf, 0, count);
                                sb.Append(tmpString);
                            } while (count > 0);

                            resStream.Flush();
                            resStream.Close();
                        }

                        response.Close();
                        request.Response = sb.ToString();

                        return sb.ToString();
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {

                request.WrappedRequest.Abort();
                request.WrappedRequest = null;
                GC.Collect();
            }
        }
Пример #28
0
 private TourFactoryControlFlags IteratingWhileGettingToursAfterTourItemSet(IPttRequest request, Tour tourItem)
 {
     return (tourItem.Price >= QueryObject.MinPrice && tourItem.Price <= QueryObject.MaxPrice) &&
            (Int32.Parse(tourItem.Night) >= QueryObject.MinNights &&
             Int32.Parse(tourItem.Night) <= QueryObject.MaxNights)
         ? TourFactoryControlFlags.Pass
         : TourFactoryControlFlags.Continue;
 }
Пример #29
0
 private TourFactoryControlFlags IteratingWhileGettingToursBeforeTourItemSet(IPttRequest request, HtmlNode node)
 {
     if(node.ParentNode.SelectNodes("tr").FirstOrDefault() == node) return TourFactoryControlFlags.Continue;
     return node.ChildNodes.Count() < 12 ? TourFactoryControlFlags.Continue : TourFactoryControlFlags.Pass;
 }
Пример #30
0
        public void PrepareForPost(IPttRequest request)
        {
            if (string.IsNullOrEmpty(request.PostValue)) return;
            var send = Encoding.Default.GetBytes(request.PostValue);
            request.WrappedRequest.ContentLength = send.Length;

            using (var sout = request.WrappedRequest.GetRequestStream())
            {
                sout.Write(send, 0, send.Length);
                sout.Flush();
                sout.Close();
            }
        }