C# HttpHelper

    public enum HttpVerb
    {
        Get,
        Post
    }
    
    public class HttpHelper
    {
        private string _contentType = "application/x-www-form-urlencoded";
        //private string _contentType = "application/json";
        //private string _contentType = "text/xml";
        private int _timeout = 15000;
        
        public string EndPoint { get; set; }
        public HttpVerb Method { get; set; }
        public string ContentType { get { return _contentType; } set { _contentType = value; } }
        public string PostData { get; set; }

        /// <summary>
        /// 默认15000毫秒
        /// </summary>
        public int Timeout { get { return _timeout; } set { _timeout = value; } }
        
        public HttpHelper(string endpoint)
        {
            EndPoint = endpoint;
            Method = HttpVerb.Get;
            ContentType = _contentType;
            PostData = "{}";
        }
        
        public string Post(string data)
        {
            var service = new Uri(EndPoint);
            var request = WebRequest.CreateHttp(service);
            request.Method = "POST";
            request.Timeout = Timeout;
            request.KeepAlive = true;
            request.ContentLength = 0;
            request.ContentType = ContentType;
            request.Accept = "application/json";

            var bytes = Encoding.UTF8.GetBytes(data);
            request.ContentLength = bytes.Length;
            using (var writeStream = request.GetRequestStream())
            {
                writeStream.Write(bytes, 0, bytes.Length);
            }

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                var responseValue = string.Empty;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    var message = String.Format(CultureInfo.CurrentCulture, "Request failed. Received HTTP {0}", response.StatusCode);
                    throw new WebException(message);
                }
                using (var responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                        using (var reader = new StreamReader(responseStream))
                        {
                            responseValue = reader.ReadToEnd();
                        }
                }
                return responseValue;
            }
        }

        /// <summary>
        /// Request server
        /// </summary>
        /// <param name="parameters">eg. "?q=1234"</param>
        /// <returns></returns>
        public string Get(string parameters)
        {
            var service = new Uri(EndPoint + parameters);
            var request = WebRequest.CreateHttp(service);
            request.Method = "GET";
            request.Timeout = Timeout;
            request.KeepAlive = true;
            request.ContentLength = 0;
            request.ContentType = ContentType;

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                var responseValue = string.Empty;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    var message = String.Format(CultureInfo.CurrentCulture, "Request failed. Received HTTP {0}", response.StatusCode);
                    throw new WebException(message);
                }
                using (var responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                        using (var reader = new StreamReader(responseStream))
                        {
                            responseValue = reader.ReadToEnd();
                        }
                }
                return responseValue;
            }
        }

        /// <summary>
        /// 下载更新二进制文件
        /// </summary>
        /// <param name="parameters">eg. "?q=1234"</param>
        /// <returns></returns>
        public byte[] DownLoad(string parameters)
        {
            var service = new Uri(EndPoint + parameters);
            var request = WebRequest.CreateHttp(service);
            request.Timeout = Timeout;
            request.KeepAlive = true;
            request.Method = Method.ToString().ToUpper(CultureInfo.CurrentCulture);
            request.ContentLength = 0;
            request.ContentType = ContentType;

            if (Method == HttpVerb.Post)
            {
                var bytes = Encoding.UTF8.GetBytes(PostData);
                request.ContentLength = bytes.Length;

                using (var writeStream = request.GetRequestStream())
                {
                    writeStream.Write(bytes, 0, bytes.Length);
                }
            }

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    var message = String.Format(CultureInfo.CurrentCulture, "Request failed. Received HTTP {0}", response.StatusCode);
                    throw new WebException(message);
                }
                using (var result = new MemoryStream())
                {
                    const int bufferLen = 2048;
                    var buffer = new byte[bufferLen];
                    using (var responseStream = response.GetResponseStream())
                    {
                        if (responseStream != null)
                        {
                            var len = responseStream.Read(buffer, 0, bufferLen);
                            while (len > 0)
                            {
                                result.Write(buffer, 0, len);
                                len = responseStream.Read(buffer, 0, bufferLen);
                            }
                        }
                    }
                    return result.ToArray();
                }
            }
        }

    }
原文地址:https://www.cnblogs.com/jonney-wang/p/9953008.html