コード例 #1
0
        private static CookieCollection parseResponse(string value)
        {
            var cookies = new CookieCollection ();

              Cookie cookie = null;
              var pairs = splitCookieHeaderValue (value);
              for (var i = 0; i < pairs.Length; i++) {
            var pair = pairs[i].Trim ();
            if (pair.Length == 0)
              continue;

            if (pair.StartsWith ("version", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.Version = Int32.Parse (pair.GetValue ('=', true));
            }
            else if (pair.StartsWith ("expires", StringComparison.InvariantCultureIgnoreCase)) {
              var buff = new StringBuilder (pair.GetValue ('='), 32);
              if (i < pairs.Length - 1)
            buff.AppendFormat (", {0}", pairs[++i].Trim ());

              DateTime expires;
              if (!DateTime.TryParseExact (
            buff.ToString (),
            new[] { "ddd, dd'-'MMM'-'yyyy HH':'mm':'ss 'GMT'", "r" },
            CultureInfo.CreateSpecificCulture ("en-US"),
            DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal,
            out expires))
            expires = DateTime.Now;

              if (cookie != null && cookie.Expires == DateTime.MinValue)
            cookie.Expires = expires.ToLocalTime ();
            }
            else if (pair.StartsWith ("max-age", StringComparison.InvariantCultureIgnoreCase)) {
              var max = Int32.Parse (pair.GetValue ('=', true));
              var expires = DateTime.Now.AddSeconds ((double) max);
              if (cookie != null)
            cookie.Expires = expires;
            }
            else if (pair.StartsWith ("path", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.Path = pair.GetValue ('=');
            }
            else if (pair.StartsWith ("domain", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.Domain = pair.GetValue ('=');
            }
            else if (pair.StartsWith ("port", StringComparison.InvariantCultureIgnoreCase)) {
              var port = pair.Equals ("port", StringComparison.InvariantCultureIgnoreCase)
                     ? "\"\""
                     : pair.GetValue ('=');

              if (cookie != null)
            cookie.Port = port;
            }
            else if (pair.StartsWith ("comment", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.Comment = pair.GetValue ('=').UrlDecode ();
            }
            else if (pair.StartsWith ("commenturl", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.CommentUri = pair.GetValue ('=', true).ToUri ();
            }
            else if (pair.StartsWith ("discard", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.Discard = true;
            }
            else if (pair.StartsWith ("secure", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.Secure = true;
            }
            else if (pair.StartsWith ("httponly", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.HttpOnly = true;
            }
            else {
              if (cookie != null)
            cookies.Add (cookie);

              string name;
              string val = String.Empty;

              var pos = pair.IndexOf ('=');
              if (pos == -1) {
            name = pair;
              }
              else if (pos == pair.Length - 1) {
            name = pair.Substring (0, pos).TrimEnd (' ');
              }
              else {
            name = pair.Substring (0, pos).TrimEnd (' ');
            val = pair.Substring (pos + 1).TrimStart (' ');
              }

              cookie = new Cookie (name, val);
            }
              }

              if (cookie != null)
            cookies.Add (cookie);

              return cookies;
        }
コード例 #2
0
        private static CookieCollection parseRequest(string value)
        {
            var cookies = new CookieCollection ();

              Cookie cookie = null;
              var ver = 0;
              var pairs = splitCookieHeaderValue (value);
              for (var i = 0; i < pairs.Length; i++) {
            var pair = pairs[i].Trim ();
            if (pair.Length == 0)
              continue;

            if (pair.StartsWith ("$version", StringComparison.InvariantCultureIgnoreCase)) {
              ver = Int32.Parse (pair.GetValue ('=', true));
            }
            else if (pair.StartsWith ("$path", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.Path = pair.GetValue ('=');
            }
            else if (pair.StartsWith ("$domain", StringComparison.InvariantCultureIgnoreCase)) {
              if (cookie != null)
            cookie.Domain = pair.GetValue ('=');
            }
            else if (pair.StartsWith ("$port", StringComparison.InvariantCultureIgnoreCase)) {
              var port = pair.Equals ("$port", StringComparison.InvariantCultureIgnoreCase)
                     ? "\"\""
                     : pair.GetValue ('=');

              if (cookie != null)
            cookie.Port = port;
            }
            else {
              if (cookie != null)
            cookies.Add (cookie);

              string name;
              string val = String.Empty;

              var pos = pair.IndexOf ('=');
              if (pos == -1) {
            name = pair;
              }
              else if (pos == pair.Length - 1) {
            name = pair.Substring (0, pos).TrimEnd (' ');
              }
              else {
            name = pair.Substring (0, pos).TrimEnd (' ');
            val = pair.Substring (pos + 1).TrimStart (' ');
              }

              cookie = new Cookie (name, val);
              if (ver != 0)
            cookie.Version = ver;
            }
              }

              if (cookie != null)
            cookies.Add (cookie);

              return cookies;
        }