예제 #1
0
        private void AccessingWithCheck(Uri address)
        {
            new Task(() =>
            {
                using (WebClient webClient = new WebClient())
                {
                    webClient.Encoding = System.Text.Encoding.UTF8;
                    var result         = string.Empty;
                    webClient.DownloadStringCompleted +=
                        (sender, e) =>
                    {
                        if (e.Error == null)
                        {
                            result = e.Result;
                            if ((NewUrls.Count == 0) || ((NewUrls.Contains(address.ToString())) && (!OldUrls.Contains(address.ToString()))))
                            {
                                OldUrls.Add(address.ToString());
                            }
                            List <string> urls = LinkExtractor.ExtractUrl(result);

                            var urlsSameSite = urls.Where(x => Host.IsBaseOf(new Uri(x)));

                            foreach (var url in urlsSameSite.ToList())
                            {
                                string strUrl = url;
                                if (!strUrl.EndsWith("/"))
                                {
                                    if (!Path.HasExtension(new Uri(strUrl).AbsolutePath))
                                    {
                                        strUrl = url + "/";
                                    }
                                }
                                if ((!NewUrls.Contains(strUrl)) && (!OldUrls.Contains(strUrl)))
                                {
                                    NewUrls.Add(strUrl);
                                    //Console.WriteLine(url);
                                }
                            }
                            NewUrls.Remove(NewUrls[0]);
                            if (ResultEvent != null)
                            {
                                ResultEvent.Invoke(new ResultEventArgs(address.ToString(), result, urls, NewUrls, OldUrls));
                            }
                            if (NewUrls.Count > 0)
                            {
                                AccessingWithCheck(new Uri(NewUrls[0]));
                            }
                        }
                        else
                        {
                            ResultEvent.Invoke(new ResultEventArgs(e.Error));
                        }
                    };
                    webClient.DownloadStringAsync(address);
                }
            }).Start();
        }