/// <summary>
        /// Http (GET/POST)
        /// </summary>
        /// <param name="url">请求URL</param>
        /// <param name="parameters">请求参数</param>
        /// <param name="method">请求方法</param>
        /// <returns>响应内容</returns>
        public static string Request(string url, IDictionary <string, string> parameters, EnumHttpMethod method)
        {
            string jsonStr = string.Empty;

            if (method == EnumHttpMethod.Post)
            {
                HttpWebRequest  req       = null;
                HttpWebResponse rsp       = null;
                Stream          reqStream = null;

                req                 = (HttpWebRequest)WebRequest.Create(url);
                req.Method          = method.ToString();
                req.KeepAlive       = false;
                req.ProtocolVersion = HttpVersion.Version10;
                req.Timeout         = 10000;
                req.ContentType     = "application/x-www-form-urlencoded;charset=utf-8";
                byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8"));
                reqStream = req.GetRequestStream();
                reqStream.Write(postData, 0, postData.Length);
                rsp = (HttpWebResponse)req.GetResponse();
                Encoding encoding = Encoding.GetEncoding(string.IsNullOrEmpty(rsp.CharacterSet) ? "utf-8" : rsp.CharacterSet);
                jsonStr = GetResponseAsString(rsp, encoding);
                return(jsonStr);
            }
            else
            {
                //创建请求
                if (url.Contains("?"))
                {
                    url = url + "&" + BuildQuery(parameters, "utf8");
                }
                else
                {
                    url = url + "?" + BuildQuery(parameters, "utf8");
                }
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

                //GET请求
                request.Method           = "GET";
                request.ReadWriteTimeout = 5000;
                request.ContentType      = "text/html;charset=UTF-8";
                HttpWebResponse response         = (HttpWebResponse)request.GetResponse();
                Stream          myResponseStream = response.GetResponseStream();
                StreamReader    myStreamReader   = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));

                //返回内容
                jsonStr = myStreamReader.ReadToEnd();
                return(jsonStr);
            }
        }
        /// <summary>
        /// Http (GET/POST) 异步
        /// </summary>
        /// <param name="url">请求URL</param>
        /// <param name="param">请求参数</param>
        /// <param name="method">请求方法</param>
        /// <param name="contentType">响应类型</param>
        /// <param name="encoding">编码方式</param>
        /// <param name="timeout">超时时间(单位:毫秒)</param>
        /// <returns></returns>
        public static string RequestAsync(string url, string param, EnumHttpMethod method, string contentType = "application/json", Encoding encoding = null, int timeout = 10000)
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentNullException("url");
            }

            if (string.IsNullOrEmpty(contentType))
            {
                if (method == EnumHttpMethod.Post)
                {
                    contentType = "application/x-www-form-urlencoded";
                }
                if (method == EnumHttpMethod.Get)
                {
                    contentType = "text/html";
                }
            }

            encoding = encoding ?? Encoding.UTF8;

            if (!contentType.Contains("charset"))
            {
                if (contentType.Substring(contentType.Length - 1, 1) == ";")
                {
                    contentType = contentType + "charset=" + encoding.WebName;
                }
                else
                {
                    contentType = contentType + ";charset=" + encoding.WebName;
                }
            }

            if (!string.IsNullOrEmpty(param))
            {
                if (JsonHelper.IsJson(param))
                {
                }
                else
                {
                    //不是json
                    var paramArr  = param.Split('&').ToList();
                    var paramList = new List <Tuple <string, string> >();
                    foreach (var item in paramArr)
                    {
                        var k = item.Split('=')[0];
                        var v = item.Split('=')[1];
                        paramList.Add(new Tuple <string, string>(k, HttpUtility.UrlEncode(v, encoding)));
                    }
                    var paramTemp = (from p in paramList select p.Item1 + "=" + p.Item2).ToList();
                    var paramStr  = string.Join("&", paramTemp);
                    param = paramStr;
                }

                if (method == EnumHttpMethod.Get)
                {
                    var split = url.Contains("?") ? "&" : "?";
                    url = url + split + param;
                }
            }
            var webRequest = (HttpWebRequest)WebRequest.Create(url);

            webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";
            webRequest.Method    = method.ToString().ToUpper();
            var strResponse = string.Empty;

            if (method == EnumHttpMethod.Post)
            {
                webRequest.Timeout         = timeout;
                webRequest.ProtocolVersion = HttpVersion.Version10;
                webRequest.Credentials     = CredentialCache.DefaultCredentials;
                webRequest.ContentType     = contentType;
                if (!string.IsNullOrEmpty(param))
                {
                    byte[] bytes = encoding.GetBytes(param);
                    using (var stream = webRequest.GetRequestStream())
                    {
                        stream.Write(bytes, 0, bytes.Length);
                    }
                }
            }
            else if (method == EnumHttpMethod.Get)
            {
                webRequest.ReadWriteTimeout = timeout;
                webRequest.ContentType      = contentType;
            }

            var complete    = false;
            var stime       = DateTime.Now;
            var asyncResult = webRequest.BeginGetResponse(new AsyncCallback(t =>
            {
                using (var webResponse = webRequest.EndGetResponse(t))
                {
                    using (var webStream = webResponse.GetResponseStream())
                    {
                        if (webResponse.Headers.Get("Content-Encoding") == "gzip")
                        {
                            using (GZipStream gzip = new GZipStream(webStream, CompressionMode.Decompress))
                            {
                                using (var reader = new StreamReader(gzip, encoding))
                                {
                                    strResponse = reader.ReadToEndAsync().Result;
                                    complete    = true;
                                }
                            }
                        }
                        else
                        {
                            using (var streamReader = new StreamReader(webStream, encoding))
                            {
                                strResponse = streamReader.ReadToEndAsync().Result;
                                complete    = true;
                            }
                        }
                    }
                }
            }), null);

            while (!complete && (DateTime.Now - stime).TotalMilliseconds < timeout)
            {
            }

            return(strResponse);
        }