class HttpHead { TcpClient webTC = new TcpClient(); NetworkStream WebStream; StreamReader WebRead; StreamWriter WebWrite; static int size; public void annotateURL(string url) { webConnect(url); cleanConnections(); } private void webConnect(string url) { Console.WriteLine("WEbConnect"); string inputLine; try { if (!webTC.Connected) webTC.Connect(url.Split('/')[2], 80); WebStream = webTC.GetStream(); WebRead = new StreamReader(WebStream); WebWrite = new StreamWriter(WebStream); //Send HEAD if (url.Split('/').Length >= 4) WebWrite.WriteLine("HEAD " + url.Substring(7 + url.Split('/')[2].Length) + " HTTP/1.0"); else WebWrite.WriteLine("HEAD / HTTP/1.0"); WebWrite.Flush(); WebWrite.WriteLine(""); WebWrite.Flush(); inputLine = WebRead.ReadLine(); bool annotated = false; while (true) { do { if (!annotated) annotated = parseTitle(inputLine, url); if (annotated) break; } while ((inputLine = WebRead.ReadLine()) != null); break; } } catch (Exception e) { Console.WriteLine(e.ToString()); } } private bool parseTitle(string inputLine, string url) { int acceptableLength = 0; WebClient web = new WebClient(); Console.WriteLine(inputLine); if (inputLine.Contains("Content-Length:")) { size = Int32.Parse((inputLine.Split(' ')[1])); if (size <= 1073741824) acceptableLength = 1; else acceptableLength = 2; } if (inputLine.Contains("Content-Type:") && inputLine.Contains("text/html") && (acceptableLength == 2 || acceptableLength == 0)) { byte[] httpByteStream = web.DownloadData(url); string httpString = Encoding.Default.GetString(httpByteStream); string[] titleSplitArray = Regex.Split(httpString, "