421 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			421 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using Newtonsoft.Json;
							 | 
						|||
| 
								 | 
							
								using System.Net.Http.Headers;
							 | 
						|||
| 
								 | 
							
								using System.Net;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace LY.App.Common.HttpUtil
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public static class RequestUtil
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 是否已经初始化加密协议
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        private static bool _securitinit = false;
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 初始化加密协议
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public static void InitialSecurity()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (_securitinit) return;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
							 | 
						|||
| 
								 | 
							
								                    | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            catch (Exception)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                try
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
							 | 
						|||
| 
								 | 
							
								                        | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                catch (Exception)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    try
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    catch (Exception)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        try
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        catch (Exception) { }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;
							 | 
						|||
| 
								 | 
							
								            _securitinit = true;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 获取HTTP连接
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="haveSSL">是否ssl连接</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static HttpClient GetClient(bool haveSSL)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (haveSSL)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                InitialSecurity();
							 | 
						|||
| 
								 | 
							
								                var handle = new HttpClientHandler();
							 | 
						|||
| 
								 | 
							
								                handle.ServerCertificateCustomValidationCallback
							 | 
						|||
| 
								 | 
							
								                    = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
							 | 
						|||
| 
								 | 
							
								                return new HttpClient(handle);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else return new HttpClient();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 异步请求GET
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<string> GetAsync(string url,
							 | 
						|||
| 
								 | 
							
								        Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								        AuthenticationHeaderValue auth = null, int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            using (var client = GetClient(url.StartsWith("https")))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                client.Timeout = TimeSpan.FromMilliseconds(timeout);
							 | 
						|||
| 
								 | 
							
								                if (headers != null && headers.Any())
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    foreach (var item in headers)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (auth != null)
							 | 
						|||
| 
								 | 
							
								                    client.DefaultRequestHeaders.Authorization = auth;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var result = await client.GetAsync(url);
							 | 
						|||
| 
								 | 
							
								                if (result.IsSuccessStatusCode)
							 | 
						|||
| 
								 | 
							
								                    return await result.Content.ReadAsStringAsync();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 异步请求GET
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<Stream> GetStreamAsync(string url,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            using (var client = GetClient(url.StartsWith("https")))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                client.Timeout = TimeSpan.FromMilliseconds(timeout);
							 | 
						|||
| 
								 | 
							
								                if (headers != null && headers.Any())
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    foreach (var item in headers)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (auth != null)
							 | 
						|||
| 
								 | 
							
								                    client.DefaultRequestHeaders.Authorization = auth;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var result = await client.GetAsync(url);
							 | 
						|||
| 
								 | 
							
								                if (result.IsSuccessStatusCode)
							 | 
						|||
| 
								 | 
							
								                    return await result.Content.ReadAsStreamAsync();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 删除
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<string> DeleteAsync(string url,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            using (var client = GetClient(url.StartsWith("https")))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                client.Timeout = TimeSpan.FromMilliseconds(timeout);
							 | 
						|||
| 
								 | 
							
								                if (headers != null && headers.Any())
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    foreach (var item in headers)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (auth != null)
							 | 
						|||
| 
								 | 
							
								                    client.DefaultRequestHeaders.Authorization = auth;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var result = await client.DeleteAsync(url);
							 | 
						|||
| 
								 | 
							
								                if (result.IsSuccessStatusCode)
							 | 
						|||
| 
								 | 
							
								                    return await result.Content.ReadAsStringAsync();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 异步请求并解析
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <typeparam name="T"></typeparam>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<T> GetAsync<T>(string url,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null,
							 | 
						|||
| 
								 | 
							
								            int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var result = await GetAsync(url, headers, auth, timeout);
							 | 
						|||
| 
								 | 
							
								            if (result != null)
							 | 
						|||
| 
								 | 
							
								                return JsonConvert.DeserializeObject<T>(result);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return default;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 返回btye[]
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<byte[]> GetAsync(string url)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            using (var client = GetClient(url.StartsWith("https")))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                client.Timeout = TimeSpan.FromMilliseconds(2000);
							 | 
						|||
| 
								 | 
							
								                var result = await client.GetAsync(url);
							 | 
						|||
| 
								 | 
							
								                if (result.IsSuccessStatusCode)
							 | 
						|||
| 
								 | 
							
								                    return await result.Content.ReadAsByteArrayAsync();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static AuthenticationHeaderValue GetTokenHeader(string token)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return new AuthenticationHeaderValue("Bearer", token);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 异步请求POST
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="dataJson">信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<string> PostAsync(string url,
							 | 
						|||
| 
								 | 
							
								            string dataJson = null,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            using (var client = GetClient(url.StartsWith("https")))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                client.Timeout = TimeSpan.FromMilliseconds(timeout);
							 | 
						|||
| 
								 | 
							
								                if (headers != null && headers.Any())
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    foreach (var item in headers)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (auth != null)
							 | 
						|||
| 
								 | 
							
								                    client.DefaultRequestHeaders.Authorization = auth;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                StringContent content = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (dataJson != null)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    content = new StringContent(dataJson);
							 | 
						|||
| 
								 | 
							
								                    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var result = await client.PostAsync(url, content);
							 | 
						|||
| 
								 | 
							
								                if (result.IsSuccessStatusCode)
							 | 
						|||
| 
								 | 
							
								                    return await result.Content.ReadAsStringAsync();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 异步请求POST
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="data">消息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<string> PostAsync(string url,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> data,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return await PostAsync(url, JsonConvert.SerializeObject(data), headers, auth, timeout);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 异步请求POST
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <typeparam name="T"></typeparam>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="dataJson">信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<T> PostAsync<T>(string url,
							 | 
						|||
| 
								 | 
							
								            string dataJson = null,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var result = await PostAsync(url, dataJson, headers, auth, timeout);
							 | 
						|||
| 
								 | 
							
								            return JsonConvert.DeserializeObject<T>(result);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <typeparam name="T"></typeparam>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="data">消息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<T> PostAsync<T>(string url,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> data = null,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return await PostAsync<T>(url, JsonConvert.SerializeObject(data), headers, auth, timeout);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 异步推送数据流
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="stream">数据流</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<string> PutStreamAsync(
							 | 
						|||
| 
								 | 
							
								            string url, Stream stream,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 10000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            using (var client = GetClient(url.StartsWith("https")))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                client.Timeout = TimeSpan.FromMilliseconds(timeout);
							 | 
						|||
| 
								 | 
							
								                if (headers != null && headers.Any())
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    foreach (var item in headers)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (auth != null)
							 | 
						|||
| 
								 | 
							
								                    client.DefaultRequestHeaders.Authorization = auth;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                StreamContent content = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (stream != null)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    content = new StreamContent(stream);
							 | 
						|||
| 
								 | 
							
								                    content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var result = await client.PutAsync(url, content);
							 | 
						|||
| 
								 | 
							
								                if (result.IsSuccessStatusCode)
							 | 
						|||
| 
								 | 
							
								                    return await result.Content.ReadAsStringAsync();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 异步推送数据流
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url">网址</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="stream">数据流</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers">头部信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth">验证信息</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout">过期时间</param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<T> PutStreamAsync<T>(
							 | 
						|||
| 
								 | 
							
								            string url, Stream stream,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 10000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var result = await PutStreamAsync(url, stream, headers, auth, timeout);
							 | 
						|||
| 
								 | 
							
								            return JsonConvert.DeserializeObject<T>(result);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// PUT请求
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="url"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="dataJson"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="headers"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="auth"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="timeout"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static async Task<string> PutAsync(string url,
							 | 
						|||
| 
								 | 
							
								               string dataJson = null,
							 | 
						|||
| 
								 | 
							
								            Dictionary<string, string> headers = null,
							 | 
						|||
| 
								 | 
							
								            AuthenticationHeaderValue auth = null, int timeout = 5000)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            using (var client = GetClient(url.StartsWith("https")))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                client.Timeout = TimeSpan.FromMilliseconds(timeout);
							 | 
						|||
| 
								 | 
							
								                if (headers != null && headers.Any())
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    foreach (var item in headers)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (auth != null)
							 | 
						|||
| 
								 | 
							
								                    client.DefaultRequestHeaders.Authorization = auth;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                StringContent content = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (dataJson != null)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    content = new StringContent(dataJson);
							 | 
						|||
| 
								 | 
							
								                    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var result = await client.PutAsync(url, content);
							 | 
						|||
| 
								 | 
							
								                if (result.IsSuccessStatusCode)
							 | 
						|||
| 
								 | 
							
								                    return await result.Content.ReadAsStringAsync();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |