using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Security;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http.Headers;

namespace Infrastructure.Helpers
{
    public class HttpMethods
    {
        //
        // 摘要:
        //     创建HttpClient
        public static HttpClient CreateHttpClient(string url, IDictionary<string, string> cookies = null)
        {
            HttpClientHandler httpClientHandler = new HttpClientHandler();
            Uri uri = new Uri(url);
            if (cookies != null)
            {
                foreach (string key in cookies.Keys)
                {
                    string cookieHeader = key + "=" + cookies[key];
                    httpClientHandler.CookieContainer.SetCookies(uri, cookieHeader);
                }
            }

            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                ServicePointManager.ServerCertificateValidationCallback = (RemoteCertificateValidationCallback)Delegate.Combine(ServicePointManager.ServerCertificateValidationCallback, (RemoteCertificateValidationCallback)((object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors) => true));
                return new HttpClient(httpClientHandler);
            }

            return new HttpClient(httpClientHandler);
        }

        //
        // 摘要:
        //     post 请求
        //
        // 参数:
        //   url:
        //     请求地址
        //
        //   jsonData:
        //     请求参数
        public static Task<string> Post(string url, string jsonData)
        {
            HttpClient httpClient = CreateHttpClient(url);
            StringContent stringContent = new StringContent(jsonData);
            stringContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
            return httpClient.PostAsync(url, stringContent).Result.Content.ReadAsStringAsync();
        }

        //
        // 摘要:
        //     post 请求
        //
        // 参数:
        //   url:
        //     请求地址
        public static Task<string> Post(string url)
        {
            HttpClient httpClient = CreateHttpClient(url);
            StringContent stringContent = new StringContent("");
            stringContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
            return httpClient.PostAsync(url, stringContent).Result.Content.ReadAsStringAsync();
        }

        //
        // 摘要:
        //     post 请求
        //
        // 参数:
        //   url:
        //     请求地址
        //
        //   req:
        //     请求参数
        public static Task<string> Post(string url, byte[] req)
        {
            HttpClient httpClient = CreateHttpClient(url);
            ByteArrayContent content = new ByteArrayContent(req);
            return httpClient.PostAsync(url, content).Result.Content.ReadAsStringAsync();
        }

        //
        // 摘要:
        //     get 请求
        //
        // 参数:
        //   url:
        //     请求地址
        public static Task<string> Get(string url)
        {
            HttpClient httpClient = CreateHttpClient(url);
            return httpClient.GetAsync(url).Result.Content.ReadAsStringAsync();
        }
    }
}
