示例#1
0
文件: Core.cs 项目: aixasz/HTTPie.net
        public static RunResult Run(string[] args)
        {
            var result  = new RunResult();
            var options = Parser.ParseArgs(args);

            HttpWebResponse response = null;

            var client = new Client();

            try
            {
                response = client.GetResponse(options);


                if (options.CheckStatus)
                {
                    result.ExitCode = GetExitStatus(response.StatusCode, options.AllowRedirects);
                }

                if (options.IsVerbose)
                {
                    result.OutputMessage = Output.Write(options, client.Request, client.RequestBody);
                }

                var receivedStream = response.GetResponseStream();

                if (receivedStream != null && receivedStream.CanRead)
                {
                    var encode     = Encoding.GetEncoding(!string.IsNullOrEmpty(response.ContentEncoding) ? response.ContentEncoding : "utf-8");
                    var readStream = new StreamReader(receivedStream, encode);
                    result.ResponseBody = readStream.ReadToEnd();
                    readStream.Close();
                }
                result.ResponseCode = (int)response.StatusCode;
            }
            catch (WebException web)
            {
                if (web.Response != null)
                {
                    response            = (HttpWebResponse)web.Response;
                    result.ResponseCode = (int)response.StatusCode;
                    result.ExitCode     = GetExitStatus(response.StatusCode, options.AllowRedirects);
                    result.ErrorMessage = web.Message;
                }
                else
                {
                    result.ExitCode     = Consts.EXIT.ERROR;
                    result.ErrorMessage = web.Status + " " + web.Message;
                }
            }
            catch (Exception ex)
            {
                result.ExitCode     = Consts.EXIT.ERROR;
                result.ErrorMessage = ex.Message;
            }


            result.OutputMessage += Output.Write(options, result, response);

            if (response != null)
            {
                response.Close();
            }
            return(result);
        }
示例#2
0
        internal static string Write(Options options, RunResult result, HttpWebResponse response)
        {
            var output = new StringBuilder();
            var oldColor = Console.ForegroundColor;
            
            if (result.ResponseCode != 0 && response == null)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                var line = string.Format("ERROR {0} {1} ",
                              options.Item.Url,
                              result.ResponseCode
                    );
                output.Append(line);
                Console.Write(line);
            }

            if (response != null)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                var line = string.Format("{0}/{1} {2} ",
                              (response.ResponseUri.OriginalString.ToLower().Contains("https") ? Consts.HTTPS : Consts.HTTP),
                              response.ProtocolVersion,
                              result.ResponseCode
                    );

                Console.Write(line);
                output.Append(line);

                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine(response.StatusDescription);
                output.Append(response.StatusDescription + Environment.NewLine);

                if (options.ShowHeaders)
                {
                    foreach (string header in response.Headers)
                    {
                        output.Append(WriteColored(header, response.GetResponseHeader(header)));
                    }
                }

                if (options.ShowBody)
                {
                    if (response.ContentType == "application/json")
                    {
                        var obj = JObject.Parse(result.ResponseBody);

                        output.Append(WriteJsonTree(obj, 1));
                    }
                    else
                    {
                        Console.ForegroundColor = oldColor;
                        output.Append(result.ResponseBody + Environment.NewLine);
                        Console.WriteLine(result.ResponseBody);
                    }
                }
            }

            Console.ForegroundColor = oldColor;

            return output.ToString();
        }
示例#3
0
        internal static string Write(Options options, RunResult result, HttpWebResponse response)
        {
            var output   = new StringBuilder();
            var oldColor = Console.ForegroundColor;

            if (result.ResponseCode != 0 && response == null)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                var line = string.Format("ERROR {0} {1} ",
                                         options.Item.Url,
                                         result.ResponseCode
                                         );
                output.Append(line);
                Console.Write(line);
            }

            if (response != null)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                var line = string.Format("{0}/{1} {2} ",
                                         (response.ResponseUri.OriginalString.ToLower().Contains("https") ? Consts.HTTPS : Consts.HTTP),
                                         response.ProtocolVersion,
                                         result.ResponseCode
                                         );

                Console.Write(line);
                output.Append(line);

                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine(response.StatusDescription);
                output.Append(response.StatusDescription + Environment.NewLine);

                if (options.ShowHeaders)
                {
                    foreach (string header in response.Headers)
                    {
                        output.Append(WriteColored(header, response.GetResponseHeader(header)));
                    }
                }

                if (options.ShowBody)
                {
                    if (response.ContentType == "application/json")
                    {
                        var obj = JObject.Parse(result.ResponseBody);

                        output.Append(WriteJsonTree(obj, 1));
                    }
                    else
                    {
                        Console.ForegroundColor = oldColor;
                        output.Append(result.ResponseBody + Environment.NewLine);
                        Console.WriteLine(result.ResponseBody);
                    }
                }
            }

            Console.ForegroundColor = oldColor;

            return(output.ToString());
        }
示例#4
0
        public static RunResult Run(string[] args)
        {
            var result = new RunResult();
            var options = Parser.ParseArgs(args);

            HttpWebResponse response = null;

            var client = new Client();

            try
            {
                response = client.GetResponse(options);

                
                if (options.CheckStatus)
                {
                    result.ExitCode = GetExitStatus(response.StatusCode, options.AllowRedirects);
                }

                if (options.IsVerbose)
                {
                    result.OutputMessage = Output.Write(options, client.Request, client.RequestBody);
                }

                var receivedStream = response.GetResponseStream();

                if (receivedStream != null && receivedStream.CanRead)
                {
                    var encode = Encoding.GetEncoding(!string.IsNullOrEmpty(response.ContentEncoding) ? response.ContentEncoding : "utf-8");
                    var readStream = new StreamReader(receivedStream, encode);
                    result.ResponseBody = readStream.ReadToEnd();
                    readStream.Close();
                }
                result.ResponseCode = (int)response.StatusCode;

            }
            catch (WebException web)
            {
                if (web.Response != null)
                {
                    response = (HttpWebResponse)web.Response;
                    result.ResponseCode = (int)response.StatusCode;
                    result.ExitCode = GetExitStatus(response.StatusCode, options.AllowRedirects);
                    result.ErrorMessage = web.Message;
                }
                else
                {
                    result.ExitCode = Consts.EXIT.ERROR;
                    result.ErrorMessage = web.Status + " " + web.Message;
                }
                
            }
            catch (Exception ex)
            {
                result.ExitCode = Consts.EXIT.ERROR;
                result.ErrorMessage = ex.Message;
            }


            result.OutputMessage += Output.Write(options, result, response);
            
            if (response != null)
                response.Close();
            return result;
        }