public static void DisplayResponse(HttpResponse Response, int Mode, int InputCount, long Milliseconds, int respLength) { var resp = !string.IsNullOrEmpty(Response.Header) ? Response.Header.Split('\r', '\n')[0] : "[No Header]"; var inputColor = InputCount >= 20 ? ConsoleColor.Red : InputCount > 0 ? ConsoleColor.Yellow : ConsoleColor.Gray; var timeColor = Milliseconds >= 20000 ? ConsoleColor.Red : Milliseconds >= 10000 ? ConsoleColor.Yellow : ConsoleColor.Green; var respLengthColor = respLength >= 1000000 ? ConsoleColor.Red : respLength >= 100000 ? ConsoleColor.Yellow : ConsoleColor.Green; var respColor = Regex.IsMatch(resp, @"\s[45]\d{2}($|[^\d])") ? ConsoleColor.Red : Regex.IsMatch(resp, @"\s2\d{2}($|[^\d])") ? ConsoleColor.Green : ConsoleColor.DarkCyan; Cli.WriteLine( "{{Mode: {0}, Input Count: ~{1}~{2}~R~}} -> ~{3}~{4}~R~ (~{5}~{6:n0} bytes~R~ in ~{7}~{8}ms~R~)", Mode, inputColor, InputCount, respColor, resp, respLengthColor, respLength, timeColor, Milliseconds); }
public HttpResponse Read() { var bufferSize = 8192 * 4; var response = new HttpResponse(); var responseString = Stream.ReadString(bufferSize); if (responseString.Length == 0) return new HttpResponse() { Header = "", Body = "" }; if (!Regex.IsMatch(responseString, @"HTTP/\d\.\d\s\d+\s")) return new HttpResponse() { Header = "", Body = responseString }; var bodyIndex = responseString.IndexOf("\r\n\r\n"); if (bodyIndex == -1) return new HttpResponse() { Header = responseString, Body = "" }; response.Header = responseString.Remove(bodyIndex); response.Body = ""; var body = responseString.Substring(bodyIndex + 4); if (response.Header.ToLower().Contains("\r\ntransfer-encoding: chunked\r\n")) { var sb = new StringBuilder(body); if (!body.EndsWith("0\r\n\r\n")) while (true) { var c = Stream.ReadString(bufferSize); sb.Append(c); if (c == "" || c.EndsWith("0\r\n\r\n")) break; } if (sb.Length > 0) { response.ParseChunkedBody(sb.ToString()); } else { response.Body = ""; } } else { response.Body = body; } return response; }
public static void DisplayResponse(HttpResponse Response, int Mode, int InputCount, long Milliseconds) { var resp = !string.IsNullOrEmpty(Response.Header) ? Response.Header.Split('\r', '\n')[0] : "[No Header]"; Console.ForegroundColor = ConsoleColor.Gray; TraceHelper.WriteFormat("{{Mode: {0}, Input Count: ", Mode); if (InputCount >= 20) Console.ForegroundColor = ConsoleColor.Red; else if (InputCount > 0) Console.ForegroundColor = ConsoleColor.Yellow; TraceHelper.WriteFormat("{0}", InputCount); ResetColors(); Trace.Write("} -> "); if (Regex.IsMatch(resp, @"\s[45]\d{2}($|[^\d])")) Console.ForegroundColor = ConsoleColor.Red; else if (Regex.IsMatch(resp, @"\s2\d{2}($|[^\d])")) Console.ForegroundColor = ConsoleColor.Green; else Console.ForegroundColor = ConsoleColor.DarkCyan; Trace.Write(resp); ResetColors(); Trace.Write(" ("); if (Milliseconds > 20000) Console.ForegroundColor = ConsoleColor.Red; else if (Milliseconds > 10000) Console.ForegroundColor = ConsoleColor.Yellow; else Console.ForegroundColor = ConsoleColor.Green; Trace.Write(string.Format("{0:N0}ms", Milliseconds)); ResetColors(); Trace.WriteLine(")"); }