using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;

namespace CommonHelper
{
    public static class HttpHelper
    {
        /// <summary>
        /// Get获取数据
        /// </summary>
        /// <param name="getUrl"></param>
        /// <param name="resultData"></param>
        /// <returns></returns>
        public static bool GetData(string getUrl, ref string resultData)
        {
            Encoding encoding = Encoding.UTF8;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(getUrl);
            request.Method = "GET";
            using (HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader sr = new StreamReader(myResponse.GetResponseStream(), encoding))
                {
                    resultData = sr.ReadToEnd();
                }
            }
            return true;
        }

        /// <summary>
        /// Post提交数据
        /// </summary>
        /// <param name="postUrl">Url</param>
        /// <param name="postData">提交数据</param>
        /// <param name="resultData">结果数据</param>
        /// <returns></returns>
        public static bool PostData(string postUrl, string postData, ref string resultData)
        {
            return PostData(postUrl, postData, "application/json;charset=utf-8", null, ref resultData);
        }
        /// <summary>
        /// Post提交数据
        /// </summary>
        /// <param name="postUrl">Url</param>
        /// <param name="postData">提交数据</param>
        /// <param name="headers">HTTP标头键值对</param>
        /// <param name="resultData">结果数据</param>
        /// <returns></returns>
        public static bool PostData(string postUrl, string postData, Dictionary<string, string> headers, ref string resultData)
        {
            return PostData(postUrl, postData, "application/json;charset=utf-8", headers, ref resultData);
        }
        /// <summary>
        /// Post提交数据
        /// </summary>
        /// <param name="postUrl">Url</param>
        /// <param name="postData">提交数据</param>
        /// <param name="contentType">Content-type HTTP 标头的值</param>
        /// <param name="resultData">结果数据</param>
        /// <returns></returns>
        public static bool PostData(string postUrl, string postData, string contentType, ref string resultData)
        {
            return PostData(postUrl, postData, contentType, null, ref resultData);
        }
        /// <summary>
        /// Post提交数据
        /// </summary>
        /// <param name="postUrl">Url</param>
        /// <param name="postData">提交数据</param>
        /// <param name="contentType">Content-type HTTP 标头的值</param>
        /// <param name="headers">HTTP标头键值对</param>
        /// <param name="resultData">结果数据</param>
        /// <returns></returns>
        public static bool PostData(string postUrl, string postData, string contentType, Dictionary<string, string> headers, ref string resultData)
        {
            Encoding encoding = Encoding.UTF8;
            byte[] dataByte = encoding.GetBytes(postData);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl);
            request.Method = "POST";
            request.ContentType = contentType;
            request.ContentLength = dataByte.Length;
            if (headers != null)
            {
                foreach (var obj in headers)
                {
                    request.Headers.Add(obj.Key, obj.Value);
                }
            }
            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(dataByte, 0, dataByte.Length);
            }
            using (HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader sr = new StreamReader(myResponse.GetResponseStream(), encoding))
                {
                    resultData = sr.ReadToEnd();
                }
            }
            return true;
        }
    }
}