Beispiel #1
0
        /// <summary>
        /// 发送Post请求,返回响应内容字符串
        /// </summary>
        public static string HttpPost(string url, object data, SerializationType requestSerializeType = SerializationType.Json, Dictionary <string, string> header = null, CookieContainer cookies = null, X509Certificate cer = null, Encoding requestEncode = null, Encoding responseEncode = null)
        {
            string retVal = string.Empty;

            try
            {
                requestEncode  = requestEncode == null ? InternalConstant.DefaultEncode : requestEncode;
                responseEncode = responseEncode == null ? InternalConstant.DefaultEncode : responseEncode;

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

                HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
                request.Timeout     = InternalConstant.DefaultNetworkRequestTimeoutMS;
                request.Method      = "POST";
                request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";

                if (cer != null)
                {
                    request.ClientCertificates = new X509CertificateCollection {
                        cer
                    }
                }
                ;

                #region "请求头"

                if (header != null && header.Count > 0)
                {
                    foreach (var item in header)
                    {
                        try
                        {
                            switch (item.Key.ToLower())
                            {
                            case "content-type":
                                request.ContentType = item.Value;
                                break;

                            case "user-agent":
                                request.UserAgent = item.Value;
                                break;

                            case "referer":
                                request.Referer = item.Value;
                                break;

                            default:
                                request.Headers.Add(item.Key, item.Value);
                                break;
                            }
                        }
                        catch { }
                    }
                }

                if (cookies != null)
                {
                    request.CookieContainer = cookies;
                }

                #endregion

                string dataString = string.Empty;
                if (data.GetType() == typeof(string))
                {
                    dataString = data.ToString();
                }
                else
                {
                    if (requestSerializeType == SerializationType.Xml)
                    {
                        dataString = SerializationHelper.XmlSerialize(data);
                    }
                    else if (requestSerializeType == SerializationType.Json)
                    {
                        dataString = SerializationHelper.JavascriptSerialize(data);
                    }
                }

                if (!string.IsNullOrEmpty(dataString))
                {
                    var buffer = requestEncode.GetBytes(dataString);
                    using (Stream us = request.GetRequestStream())
                    {
                        us.Write(buffer, 0, buffer.Length);
                    }
                }

                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    #region "存储输出头"

                    if (response.Headers != null)
                    {
                        if (header == null)
                        {
                            header = new Dictionary <string, string>();
                        }

                        foreach (var item in response.Headers.AllKeys)
                        {
                            header.UpdateItem(item, response.Headers[item]);
                        }
                    }

                    if (response.Cookies != null)
                    {
                        if (cookies == null)
                        {
                            cookies = new CookieContainer();
                        }

                        foreach (Cookie item in response.Cookies)
                        {
                            cookies.Add(item);
                        }
                    }

                    #endregion

                    using (StreamReader reader = new StreamReader(response.GetResponseStream(), responseEncode))
                    {
                        retVal = reader.ReadToEnd();
                    }
                }
            }
            catch { }
            return(retVal);
        }