private static void WriteResponseInfo(HttpWebResponse response, ResponseDetails details)
        {
            details.Response = String.Format("{0}{1}{2}", Convert.ToString(( int )response.StatusCode), ' ', response.StatusDescription);
            details.Size     = response.ContentLength == -1 ? "Not Presented" : response.ContentLength.ToString(CultureInfo.InvariantCulture);

            using (var stream = response.GetResponseStream())
            {
                using (var reader = new StreamReader(stream, Encoding.Default))
                {
                    details.Body = reader.ReadToEnd();
                }
            }

            if (ResponseDetails != null)
            {
                //Critical section
                _mutex.WaitOne();
                ResponseDetails.Add(details);
                _mutex.ReleaseMutex();
            }
        }
        private static void SearchSpecificContent(ResponseDetails details, string searchText, string searchTag)
        {
            var doc = new HtmlDocument();

            doc.LoadHtml(details.Body);

            var body = doc.DocumentNode.SelectNodes(String.Format("{0}{1}", "//", searchTag));

            details.Body = "Did not exists";

            if (body != null)
            {
                foreach (var item in body)
                {
                    if (item.InnerText.Contains(searchText))
                    {
                        details.Body = String.Format("{0}{1}", searchText, " exists");
                        break;
                    }
                }
            }
        }
		private static void SearchSpecificContent( ResponseDetails details, string searchText, string searchTag )
		{
			var doc = new HtmlDocument();
			doc.LoadHtml( details.Body );

			var body = doc.DocumentNode.SelectNodes( String.Format( "{0}{1}", "//", searchTag ) );
			details.Body = "Did not exists";

			if( body != null )
			{
				foreach( var item in body )
				{
					if( item.InnerText.Contains( searchText ) )
					{
						details.Body = String.Format( "{0}{1}", searchText, " exists" );
						break;
					}
				}
			}
		}
		private static void WriteResponseInfo( HttpWebResponse response, ResponseDetails details )
		{
			details.Response = String.Format( "{0}{1}{2}", Convert.ToString( ( int )response.StatusCode ), ' ', response.StatusDescription );
			details.Size = response.ContentLength == -1 ? "Not Presented" : response.ContentLength.ToString( CultureInfo.InvariantCulture );

			using( var stream = response.GetResponseStream() )
			{
				using( var reader = new StreamReader( stream, Encoding.Default ) )
				{
					details.Body = reader.ReadToEnd();
				}
			}

			if( ResponseDetails != null )
			{
				//Critical section
				_mutex.WaitOne();
				ResponseDetails.Add( details );
				_mutex.ReleaseMutex();
			}
		}
		public static void ScanResource( object request )
		{
			var castedRequest = ( HttpWebRequest )request;
			var details = new ResponseDetails
				{
					Url = castedRequest.RequestUri,
					Category = Categories.SignInPages
				};

			try
			{
				using( var response = ( HttpWebResponse )castedRequest.GetResponse() )
				{
					foreach( Cookie cookie in response.Cookies )
					{
						CookieContainer.Add( response.ResponseUri, cookie );
					}

					WriteResponseInfo( response, details );
				}
			}
			catch( WebException ex )
			{
				WriteResponseInfo( ( HttpWebResponse )ex.Response, details );
			}
		}