private string[] GetHeaderValues(WebHeaderCollection headers, string name)
        {
            // .NET 的 webResponse.Headers.GetValues("Set-Cookie") 这个方法有BUG

            // 例如,服务端写一个COOKIE,响应头应该是:
            // Set-Cookie: keeplastname=; expires=Tue, 12-Jul-2016 01:54:42 GMT; path=/

            // 调用 webResponse.Headers.GetValues("Set-Cookie") 会返回二行的结果:
            // keeplastname=; expires=Tue
            // 12-Jul-2016 01:54:42 GMT; path=/

            // 然而,内部的集合存储的原始值是正确的,
            // 所以,只能重新实现这个方法。

            var innerList = headers.GetType().InvokeMember("InnerCollection",
                                                           BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetProperty,
                                                           null, headers, null) as NameObjectCollectionBase;

            var table = typeof(NameObjectCollectionBase).InvokeMember("_entriesTable",
                                                                      BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField,
                                                                      null, innerList, null) as Hashtable;

            if (table == null)
            {
                return(null);
            }

            var entry = table[name];

            if (entry == null)
            {
                return(null);
            }

            var value = entry.GetType().InvokeMember("Value",
                                                     BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField,
                                                     null, entry, null) as ArrayList;

            if (value == null)
            {
                return(null);
            }

            string[] array = new string[value.Count];
            value.CopyTo(array);
            return(array);
        }