Ejemplo n.º 1
0
        /// <summary>
        /// 建立請求的頭檔
        /// </summary>
        /// <param name="request"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public static HttpWebRequest BuildRequestHeader(HttpWebRequest request, HttpHeaderList headers)
        {
            foreach (String h in headers.GetHeaderKeys())
            {
                switch (h.Trim().ToLower())
                {
                    case "accept":
                        request.Accept = headers.GetHeaderValue(h);
                        break;
                    case "accept-encoding":
                        if (headers.GetHeaderValue(h).ToLower().Contains("gzip") &&
                            headers.GetHeaderValue(h).ToLower().Contains("deflate"))
                        {
                            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
                        }
                        else if (headers.GetHeaderValue(h).ToLower().Contains("gzip"))
                        {
                            request.AutomaticDecompression = DecompressionMethods.GZip;
                        }
                        else if (headers.GetHeaderValue(h).ToLower().Contains("deflate"))
                        {
                            request.AutomaticDecompression = DecompressionMethods.Deflate;
                        }
                        break;
                    case "authorization":
                        request.PreAuthenticate = true;
                        request.Headers.Add("Authorization", headers.GetHeaderValue(h));
                        break;
                    case "connection":
                        {
                            string connectionValue = headers.GetHeaderValue(h).Trim().ToLower();
                            if (connectionValue.Contains("keep-alive"))
                            { request.KeepAlive = true; }
                            if (connectionValue.Contains("upgrade"))
                            { request.Headers.Add("Connection", "Upgrade"); }
                        }

                        break;
                    case "content-type":
                        request.ContentType = headers.GetHeaderValue(h);

                        break;
                    case "content-length":
                        request.ContentLength = Convert.ToInt64(headers.GetHeaderValue(h));
                        break;
                    case "date":
                        request.Date = Convert.ToDateTime(headers.GetHeaderValue(h));
                        break;
                    case "expect":
                        request.Expect = headers.GetHeaderValue(h);
                        break;

                    case "host":
                        request.Host = headers.GetHeaderValue(h);
                        break;

                    case "if-modified-since":
                        request.IfModifiedSince = Convert.ToDateTime(headers.GetHeaderValue(h));
                        break;
                    case "referer":
                        request.Referer = headers.GetHeaderValue(h);
                        break;
                    case "user-agent":
                        request.UserAgent = headers.GetHeaderValue(h);
                        break;
                    default:
                        request.Headers.Add(h, headers.GetHeaderValue(h));
                        break;
                }
            }
            return request;
        }