コード例 #1
0
 public HttpResponse()
 {
     Header = new HttpHeader();
     Header.HTTPVersionString = "HTTP/1.1";
     ReturnCode = 200;
     AddExtraNewLine = false;
 }
コード例 #2
0
        /// <summary>
        /// Parse a string to make a HttpHeader
        /// </summary>
        /// <param name="header"></param>
        /// <returns></returns>
        public static HttpHeader Parse(string header)
        {
            HttpHeader ret = new HttpHeader();

            // split into lines
            string[] lines = header.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

            // request line is first
            string[] parts = lines[0].Split(' ');
            ret.Method = parts[0];
            ret.RequestURI = parts[1];
            ret.HTTPVersionString = parts[2];

            // go through the rest of the strings and get data from them
            // other header fields are in 5.3 of https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html
            for (int i = 1; i < lines.Length; i++)
            {
                // if the line doen't contain a colon then finish
                if (lines[i].IndexOf(':') < 0) break;

                // get header field name and value
                parts = lines[i].Split(':');
                string fieldName = parts[0];
                string value = parts[1].Trim();

                // add into the dictionary
                //ret.HeaderFields.Add(fieldName, value);

                // what is it? (case-insensitive https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2)
                if (fieldName.Equals("Accept", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.Accept = HttpAcceptHeader.Parse(value);
                }
                else if (fieldName.Equals("Accept-Charset", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.AcceptCharset = value.Split(',').Select(s => s.Trim()).ToArray();
                }
                else if (fieldName.Equals("Accept-Encoding", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.AcceptEncoding = value.Split(',').Select(s => s.Trim()).ToArray();
                }
                else if (fieldName.Equals("Accept-Language", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.AcceptLanguage = value.Split(',').Select(s => s.Trim()).ToArray();
                }
                else if (fieldName.Equals("Authorization", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.Authorization = value;
                }
                else if (fieldName.Equals("Expect", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.Expect = value;
                }
                else if (fieldName.Equals("From", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.From = value;
                }
                else if (fieldName.Equals("Host", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.Host = value;
                }
                else if (fieldName.Equals("If-Match", StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Headers.IfMatch = value;
                }
                else if (StrComp(fieldName, "Cache-Control"))
                {
                    ret.Headers.CacheControl = HttpCacheControlHeader.Parse(value);
                }
                else if (StrComp(fieldName, "User-Agent"))
                {
                    ret.Headers.UserAgent = value;
                }
                else if (StrComp(fieldName, "Connection"))
                {
                    ret.Headers.Connection = HttpConnectionHeader.Parse(value);
                }
                else if (StrComp(fieldName, "Content-Length"))
                {
                    ret.Headers.ContentLength = int.Parse(value);
                } else
                {
                    ret.CustomFields[fieldName] = value;
                }
            }

            return ret;
        }