/// <summary> /// 【异步方法】异步从Url下载 /// </summary> /// <param name="url"></param> /// <param name="stream"></param> /// <returns></returns> public static async Task DownloadAsync(string url, Stream stream) { HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; var data = await httpClient.GetByteArrayAsync(url).ConfigureAwait(false); await stream.WriteAsync(data, 0, data.Length).ConfigureAwait(false); }
/// <summary> /// LocalCacheStrategy的构造函数 /// </summary> MemcachedObjectCacheStrategy(/*ILoggerFactory loggerFactory, IOptions<MemcachedClientOptions> optionsAccessor*/) { _config = GetMemcachedClientConfiguration(); var provider = OFoodDI.GetIServiceProvider(); ILoggerFactory loggerFactory = provider.GetService <ILoggerFactory>(); Cache = new MemcachedClient(loggerFactory, _config); }
/// <summary> /// 使用Get方法获取字符串结果(没有加入Cookie) /// </summary> /// <param name="url"></param> /// <returns></returns> public static string HttpGet(string url, Encoding encoding = null) { var handler = HttpClientHelper.GetHttpClientHandler(null, SenparcHttpClientWebProxy, DecompressionMethods.GZip); HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; return(httpClient.GetStringAsync(url).Result); }
/// <summary> /// 【异步方法】使用Post方法上传数据并下载文件或结果 /// </summary> /// <param name="url"></param> /// <param name="data"></param> /// <param name="stream"></param> public static async Task DownloadAsync(string url, string data, Stream stream) { HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; HttpContent hc = new StringContent(data); var ht = await httpClient.PostAsync(url, hc).ConfigureAwait(false); var fileBytes = await ht.Content.ReadAsByteArrayAsync().ConfigureAwait(false); await stream.WriteAsync(fileBytes, 0, fileBytes.Length).ConfigureAwait(false);//也可以分段写入 }
/// <summary> /// 从Url下载 /// </summary> /// <param name="url"></param> /// <param name="stream"></param> public static void Download(string url, Stream stream) { HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; var t = httpClient.GetByteArrayAsync(url); t.Wait(); var data = t.Result; stream.Write(data, 0, data.Length); }
/// <summary> /// 从 HttpClientFactory 的唯一名称中获取 HttpClient 对象,并加载到 SenparcHttpClient 中 /// </summary> /// <param name="httpClientName"></param> /// <returns></returns> public static SenparcHttpClient GetInstanceByName(string httpClientName) { if (!string.IsNullOrEmpty(httpClientName)) { var clientFactory = OFoodDI.GetRequiredService <IHttpClientFactory>(); var httpClient = clientFactory.CreateClient(httpClientName); return(new SenparcHttpClient(httpClient)); } return(OFoodDI.GetRequiredService <SenparcHttpClient>(true)); }
/// <summary> /// 使用Get方法获取字符串结果(没有加入Cookie) /// </summary> /// <param name="url"></param> /// <returns></returns> public static async Task <string> HttpGetAsync(string url, Encoding encoding = null) { var handler = new HttpClientHandler { UseProxy = SenparcHttpClientWebProxy != null, Proxy = SenparcHttpClientWebProxy, }; HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; return(await httpClient.GetStringAsync(url).ConfigureAwait(false)); }
private static MemcachedClientConfiguration GetMemcachedClientConfiguration(/*ILoggerFactory loggerFactory, IOptions<MemcachedClientOptions> optionsAccessor*/) { //每次都要新建 var provider = OFoodDI.GetIServiceProvider(); ILoggerFactory loggerFactory = provider.GetService <ILoggerFactory>(); IOptions <MemcachedClientOptions> optionsAccessor = provider.GetService <IOptions <MemcachedClientOptions> >(); var config = new MemcachedClientConfiguration(loggerFactory, optionsAccessor); return(config); }
/// <summary> /// 使用Post方法上传数据并下载文件或结果 /// </summary> /// <param name="url"></param> /// <param name="data"></param> /// <param name="stream"></param> public static void Download(string url, string data, Stream stream) { HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; HttpContent hc = new StringContent(data); var ht = httpClient.PostAsync(url, hc); ht.Wait(); var ft = ht.Result.Content.ReadAsByteArrayAsync(); ft.Wait(); var file = ft.Result; stream.Write(file, 0, file.Length); }
/// <summary> /// .NET Core 版本的HttpWebRequest参数设置 /// </summary> /// <returns></returns> private static HttpClient HttpGet_Common_NetCore(string url, CookieContainer cookieContainer = null, Encoding encoding = null, X509Certificate2 cer = null, string refererUrl = null, bool useAjax = false, int timeOut = OFoodConfig.TIME_OUT) { var handler = HttpClientHelper.GetHttpClientHandler(cookieContainer, RequestUtility.SenparcHttpClientWebProxy, DecompressionMethods.GZip); if (cer != null) { handler.ClientCertificates.Add(cer); } HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; HttpClientHeader(httpClient, refererUrl, useAjax, null, timeOut); return(httpClient); }
/// <summary> /// 注册 IServiceCollection,并返回 RegisterService,开始注册流程(必须) /// </summary> /// <param name="serviceCollection">IServiceCollection</param> /// <param name="certName">证书名称,必须全局唯一,并且确保在全局 HttpClientFactory 内唯一</param> /// <param name="cert">证书对象,也可以是 X509Certificate2</param> /// <param name="checkValidationResult">设置</param> /// <returns></returns> public static IServiceCollection AddSenparcHttpClientWithCertificate(this IServiceCollection serviceCollection, string certName, X509Certificate cert, bool checkValidationResult = false) { serviceCollection.AddHttpClient <SenparcHttpClient>(certName) .ConfigurePrimaryHttpMessageHandler(() => { var httpClientHandler = HttpClientHelper.GetHttpClientHandler(null, RequestUtility.SenparcHttpClientWebProxy, System.Net.DecompressionMethods.GZip); httpClientHandler.ClientCertificates.Add(cert); if (checkValidationResult) { httpClientHandler.ServerCertificateCustomValidationCallback = new Func <HttpRequestMessage, X509Certificate2, X509Chain, SslPolicyErrors, bool>(RequestUtility.CheckValidationResult); } return(httpClientHandler); }); OFoodDI.ResetGlobalIServiceProvider();//重置 GlobalIServiceProvider return(serviceCollection); }
/// <summary> /// 【异步方法】从Url下载,并保存到指定目录 /// </summary> /// <param name="url">需要下载文件的Url</param> /// <param name="filePathName">保存文件的路径,如果下载文件包含文件名,按照文件名储存,否则将分配Ticks随机文件名</param> /// <param name="timeOut">超时时间</param> /// <returns></returns> public static async Task <string> DownloadAsync(string url, string filePathName, int timeOut = OFoodConfig.TIME_OUT) { var dir = Path.GetDirectoryName(filePathName) ?? "/"; Directory.CreateDirectory(dir); System.Net.Http.HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; httpClient.Timeout = TimeSpan.FromMilliseconds(timeOut); using (var responseMessage = await httpClient.GetAsync(url).ConfigureAwait(false)) { if (responseMessage.StatusCode == HttpStatusCode.OK) { string responseFileName = null; //ContentDisposition可能会为Null if (responseMessage.Content.Headers.ContentDisposition != null && responseMessage.Content.Headers.ContentDisposition.FileName != null && responseMessage.Content.Headers.ContentDisposition.FileName != "\"\"") { responseFileName = Path.Combine(dir, responseMessage.Content.Headers.ContentDisposition.FileName.Trim('"')); } var fullName = responseFileName ?? Path.Combine(dir, GetRandomFileName()); using (var fs = File.Open(fullName, FileMode.Create)) { using (var responseStream = await responseMessage.Content.ReadAsStreamAsync().ConfigureAwait(false)) { await responseStream.CopyToAsync(fs).ConfigureAwait(false); await fs.FlushAsync().ConfigureAwait(false); } } return(fullName); } else { return(null); } } }
//#if !NET35 && !NET40 /// <summary> /// 从Url下载,并保存到指定目录 /// </summary> /// <param name="url">需要下载文件的Url</param> /// <param name="filePathName">保存文件的路径,如果下载文件包含文件名,按照文件名储存,否则将分配Ticks随机文件名</param> /// <param name="timeOut">超时时间</param> /// <returns></returns> public static string Download(string url, string filePathName, int timeOut = 999) { var dir = Path.GetDirectoryName(filePathName) ?? "/"; Directory.CreateDirectory(dir); System.Net.Http.HttpClient httpClient = OFoodDI.GetRequiredService <SenparcHttpClient>().Client; using (var responseMessage = httpClient.GetAsync(url).Result) { if (responseMessage.StatusCode == HttpStatusCode.OK) { string responseFileName = null; //ContentDisposition可能会为Null if (responseMessage.Content.Headers.ContentDisposition != null && responseMessage.Content.Headers.ContentDisposition.FileName != null && responseMessage.Content.Headers.ContentDisposition.FileName != "\"\"") { responseFileName = Path.Combine(dir, responseMessage.Content.Headers.ContentDisposition.FileName.Trim('"')); } var fullName = responseFileName ?? Path.Combine(dir, GetRandomFileName()); using (var fs = File.Open(fullName, FileMode.Create)) { using (var responseStream = responseMessage.Content.ReadAsStreamAsync().Result) { responseStream.CopyTo(fs); fs.Flush(); } } return(fullName); } else { return(null); } } }
/// <summary> /// 获取页面提交的get和post参数 /// 注意:.NetCore环境必须传入HttpContext实例,不能传Null,这个接口调试特别困难,千万别出错! /// </summary> /// <param name="httpContext"></param> public ResponseHandler(HttpContext httpContext) { #if NET35 || NET40 || NET45 || NET461 Parameters = new Hashtable(); this.HttpContext = httpContext ?? HttpContext.Current; NameValueCollection collection; //post data if (this.HttpContext.Request.HttpMethod == "POST") { collection = this.HttpContext.Request.Form; foreach (string k in collection) { string v = (string)collection[k]; this.SetParameter(k, v); } } //query string collection = this.HttpContext.Request.QueryString; foreach (string k in collection) { string v = (string)collection[k]; this.SetParameter(k, v); } if (this.HttpContext.Request.InputStream.Length > 0) { XmlDocument xmlDoc = new Senparc.CO2NET.ExtensionEntities.XmlDocument_XxeFixed(); xmlDoc.XmlResolver = null; xmlDoc.Load(this.HttpContext.Request.InputStream); XmlNode root = xmlDoc.SelectSingleNode("xml"); XmlNodeList xnl = root.ChildNodes; foreach (XmlNode xnf in xnl) { this.SetParameter(xnf.Name, xnf.InnerText); } } #else Parameters = new Hashtable(); //#if NETSTANDARD2_0 // HttpContext = httpContext ?? throw new WeixinException(".net standard 2.0 环境必须传入HttpContext的实例"); //#else HttpContext = httpContext ?? OFoodDI.GetService <IHttpContextAccessor>()?.HttpContext; //#endif //post data if (HttpContext.Request.Method.ToUpper() == "POST" && HttpContext.Request.HasFormContentType) { foreach (var k in HttpContext.Request.Form) { SetParameter(k.Key, k.Value[0]); } } //query string foreach (var k in HttpContext.Request.Query) { SetParameter(k.Key, k.Value[0]); } if (HttpContext.Request.ContentLength > 0) { var xmlDoc = new XmlDocument_XxeFixed(); xmlDoc.XmlResolver = null; //xmlDoc.Load(HttpContext.Request.Body); using (var reader = new System.IO.StreamReader(HttpContext.Request.Body)) { xmlDoc.Load(reader); } var root = xmlDoc.SelectSingleNode("xml"); foreach (XmlNode xnf in root.ChildNodes) { SetParameter(xnf.Name, xnf.InnerText); } } #endif }