From 923622a4bbafba87c7428fd881dc8541c94641c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E9=9C=B2=E5=B0=A7?= Date: Tue, 14 Feb 2023 11:35:23 +0800 Subject: [PATCH] =?UTF-8?q?bugfix=20:=20=E8=A7=A3=E5=86=B3=E5=A4=96?= =?UTF-8?q?=E7=BD=91=E4=B8=8B=E8=BD=BD=E6=96=87=E4=BB=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Transfer_Client_Service_HttpHandler.csproj | 4 + .../HttpDataHandler.cs | 2 +- .../HttpJsonDataHandler.cs | 5 +- .../HttpService.cs | 125 +++++++- .../HttpWebService.cs | 289 ++++++++++++++++++ .../RequestWaysHelp.cs | 289 ++++++++++++++++++ .../Program.cs | 1 + .../Getf.Service.Transfer.Core.csproj | 5 +- .../packages.config | 6 +- .../App.config | 6 +- .../Getf.Service.Transfer.WinService.csproj | 2 +- 94_wai/Getf.Service.Transfer/App.config | 74 ++--- .../Getf.Service.Transfer.csproj | 5 +- 94_wai/Getf.Service.Transfer/packages.config | 4 +- 14 files changed, 753 insertions(+), 64 deletions(-) create mode 100644 93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpWebService.cs create mode 100644 93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/RequestWaysHelp.cs diff --git a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/Getf_Service_Transfer_Client_Service_HttpHandler.csproj b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/Getf_Service_Transfer_Client_Service_HttpHandler.csproj index 12d8333..1d6724d 100644 --- a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/Getf_Service_Transfer_Client_Service_HttpHandler.csproj +++ b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/Getf_Service_Transfer_Client_Service_HttpHandler.csproj @@ -4,6 +4,10 @@ net5.0 + + + + diff --git a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpDataHandler.cs b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpDataHandler.cs index 6ef2ce8..a4dae95 100644 --- a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpDataHandler.cs +++ b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpDataHandler.cs @@ -24,7 +24,7 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler var url = action; HttpService httpService = new HttpService(); var jsonStr = String.IsNullOrWhiteSpace(srcData.Body.Param) ? "{}" : srcData.Body.Param; - var rData = httpService.DoRequest(url, JsonConvert.DeserializeObject(jsonStr), out string msg); + var rData = httpService.DoRequest(url, JsonConvert.DeserializeObject(jsonStr), srcData.Data, out string msg); if (rData == null) { r.TransResultInfo = new TransResult() diff --git a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpJsonDataHandler.cs b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpJsonDataHandler.cs index 682f005..4db80a7 100644 --- a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpJsonDataHandler.cs +++ b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpJsonDataHandler.cs @@ -21,9 +21,10 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler return r; } var url = action; - HttpService httpService = new HttpService(); + //HttpService httpService = new HttpService(); + var httpService = new HttpWebService(); var jsonStr = String.IsNullOrWhiteSpace(srcData.Body.Param) ? "{}" : srcData.Body.Param; - var rData = httpService.DoRequest(url, JsonConvert.DeserializeObject(jsonStr), out string msg); + var rData = httpService.DoRequest(url, JsonConvert.DeserializeObject(jsonStr), srcData.Data, out string msg); if (rData == null) { r.TransResultInfo = new TransResult() diff --git a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpService.cs b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpService.cs index 1b3303d..1cb7d2d 100644 --- a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpService.cs +++ b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpService.cs @@ -1,4 +1,6 @@ -using Getf_Service_Transfer_Client_coreService.Helpers; +using Getf_Service_Transfer_Client_coreService.Entities; +using Getf_Service_Transfer_Client_coreService.Helpers; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; @@ -21,7 +23,7 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler _LogHelper = new LogHelper(); } - public object DoRequest(string url, JObject jObject, out string msg) + public object DoRequest(string url, JObject jObject, byte[] data, out string msg) { msg = String.Empty; try @@ -37,8 +39,6 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler _LogHelper.Info($"93段接口url:{url}"); } HttpWebRequest httpWebRequest = WebRequest.Create(url) as HttpWebRequest; - - var head = jObject["Head"]; Encoding encoding = new UTF8Encoding(false); if (jObject["Encoding"] != null) { @@ -48,19 +48,49 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler { httpWebRequest.ContentType = jObject["ContentType"].Value(); } - - SetHead(httpWebRequest, method, head); - + httpWebRequest.Method = method; + if (data.Length == 0) + { + var head = jObject["Head"]; + SetHead(httpWebRequest, method, head); + } object r; if (!"GET".Equals(method, StringComparison.OrdinalIgnoreCase)) { - using (var requestStream = httpWebRequest.GetRequestStream()) + using var requestStream = httpWebRequest.GetRequestStream(); + if (data.Length > 0) { - SetPostRequestStream(httpWebRequest, requestStream, jObject, encoding); - r = GetResponse(httpWebRequest, encoding); - requestStream.Close(); - requestStream.Dispose(); + var bodyIndex = GetBodyIndex(data); + var headBytes = data.Take(bodyIndex).ToArray(); + var headStr = encoding.GetString(headBytes); + SetHead(httpWebRequest, method, headStr); + + string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线 + //httpWebRequest.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary; + byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n"); + byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); + + + requestStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length); + //requestStream.Write(headBytes, 0, headBytes.Length); + var bodyData = data.Skip(bodyIndex)/*.Select(m => (char)m)*/.ToArray(); + requestStream.Write(bodyData, 0, bodyData.Length); + requestStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length); + + + //var bodyIndex = GetBodyIndex(data); + //var headStr = encoding.GetString(data.Take(bodyIndex).ToArray()); + //SetHead(httpWebRequest, method, headStr); + //var bodyData = data.Skip(bodyIndex)/*.Select(m => (char)m)*/.ToArray(); + //requestStream.Write(bodyData, 0, bodyData.Length); + ////Bytes2File(bodyData, "", "11.zip"); + ////requestStream.Write(data, 0, data.Length); } + else + SetPostRequestStream(httpWebRequest, requestStream, jObject, encoding); + r = GetResponse(httpWebRequest, encoding); + requestStream.Close(); + requestStream.Dispose(); } else { @@ -106,6 +136,50 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler } return null; } + /// + /// 将byte数组转换为文件并保存到指定地址 + /// + /// byte数组 + /// 保存地址 + public void Bytes2File(byte[] buff, string savepath, string fileName) + { + try + { + //如果不存在就创建Enclosure文件夹 + if (Directory.Exists(savepath + @"\Enclosure\") == false) + { + Directory.CreateDirectory(savepath + @"\Enclosure\"); + } + + if (System.IO.File.Exists(savepath + @"\Enclosure\" + fileName)) + { + System.IO.File.Delete(savepath + @"\Enclosure\" + fileName); + } + FileStream fs = new FileStream(savepath + @"\Enclosure\" + fileName, FileMode.CreateNew); + BinaryWriter bw = new BinaryWriter(fs); + bw.Write(buff, 0, buff.Length); + bw.Close(); + fs.Close(); + } + catch (Exception) + { + } + + } + private int GetBodyIndex(byte[] data) + { + var index = -1; + for (int i = 0, c = data.Length; i < c; i++) + { + var elem = data[i]; + if (elem == '\r' && i + 3 < data.Length && data[i + 1] == '\n' && data[i + 2] == '\r' && data[i + 3] == '\n') + { + index = i + 4; + break; + } + } + return index; + } private string GetGetUrl(string url, JObject jObject) { if (!url.Contains("?")) url += "?1=1"; @@ -170,12 +244,37 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler } } + private void SetHead(HttpWebRequest httpWebRequest, string method, string headStr) + { + httpWebRequest.Method = method; + var headStrSplitResult = headStr.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var elem in headStrSplitResult) + { + var keyValue = elem.Split(':'); + var name = keyValue[0]; + var value = keyValue[1]; + if ("Accept-Encoding".Equals(name, StringComparison.OrdinalIgnoreCase)) + { + httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip; + } + SetHeaderValue(httpWebRequest.Headers, name, value); + } + /*if ("post".Equals(method, StringComparison.OrdinalIgnoreCase)) + { + if (String.IsNullOrWhiteSpace(httpWebRequest.ContentType)) + { + httpWebRequest.ContentType = "application/x-www-form-urlencoded"; + } + }*/ + } + private void SetPostRequestStream(HttpWebRequest httpWebRequest, Stream requestStream, JObject jObject, Encoding encoding) { using (var streamWrite = new StreamWriter(requestStream, encoding)) { var param = jObject["Param"]?.Value() ?? String.Empty; - streamWrite.Write(param); + if (!string.IsNullOrEmpty(param)) + streamWrite.Write(param); var jdata = jObject["Data"]; if (jdata != null) diff --git a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpWebService.cs b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpWebService.cs new file mode 100644 index 0000000..75bdad5 --- /dev/null +++ b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/HttpWebService.cs @@ -0,0 +1,289 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Getf_Service_Transfer_Client_coreService.Entities; +using Getf_Service_Transfer_Client_coreService; +using Getf_Service_Transfer_Client_Service_HttpHandler; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using Getf_Service_Transfer_Client_coreService.Helpers; +using System.Collections.Specialized; +using System.IO; +using System.Net; +using System.Reflection; +using System.Net.Http; +using Furion.RemoteRequest.Extensions; +using Furion.RemoteRequest; + +namespace Getf_Service_Transfer_Client_Service_HttpHandler +{ + public class HttpWebService + { + LogHelper _LogHelper; + + public HttpWebService() + { + _LogHelper = new LogHelper(); + } + + public object DoRequest(string url, JObject jObject, byte[] data, out string msg) + { + msg = String.Empty; + try + { + var method = HttpMethod.Post; + if (jObject["Method"] != null) + { + if ("GET".Equals(jObject["Method"].Value(), StringComparison.OrdinalIgnoreCase)) + { + method = HttpMethod.Get; + url = GetGetUrl(url, jObject); + _LogHelper.Info($"93段接口url:{url}"); + } + } + var httpRequst = url.SetHttpMethod(method); + Encoding encoding = new UTF8Encoding(false); + if (jObject["Encoding"] != null) + { + httpRequst.SetContentEncoding(Encoding.GetEncoding(jObject["Encoding"].Value())); + } + object r; + SetHead(httpRequst, jObject["Head"]); + httpRequst.SetBody(jObject["Data"].ToString()); + if (data.Length > 0) + { + httpRequst.SetRequestUrl(url + "byte"); + httpRequst.SetBody(new { FileName = jObject["Data"]["fileName"].ToString(), bytes = data }); + } + var response = httpRequst.SendAsync().Result; + if (IsTextContentType(response.Content.Headers.ContentType.MediaType)) + { + r = response.Content.ReadAsStringAsync().Result; + } + else + { + r = response.Content.ReadAsByteArrayAsync().Result; + } + + _LogHelper.Info($"93段接口:method:{method},url:{url},参数:{jObject["Data"]},结果:{r}"); + return r; + } + catch (WebException e) + { + _LogHelper.Info("异常:" + Newtonsoft.Json.JsonConvert.SerializeObject(e)); + if (e?.Response != null) + { + using (var stream = e?.Response?.GetResponseStream()) + { + msg = "http错误(" + (int)(e?.Response as HttpWebResponse)?.StatusCode + ")"; + if (stream != null) + { + using (StreamReader streamReader = new StreamReader(stream)) + { + msg += streamReader.ReadToEnd(); + _LogHelper.Info("1:请求错误原因为:" + msg); + } + } + else + { + msg += e.Message; + _LogHelper.Info("2:请求错误原因为:" + msg); + } + } + } + else + { + msg += e.Message; + _LogHelper.Info("2:请求错误原因为:" + msg); + } + } + catch (Exception e) + { + msg = e.Message; + _LogHelper.Info("3:请求错误原因为:" + msg); + } + return null; + } + /// + /// 将byte数组转换为文件并保存到指定地址 + /// + /// byte数组 + /// 保存地址 + public void Bytes2File(byte[] buff, string savepath, string fileName) + { + try + { + //如果不存在就创建Enclosure文件夹 + if (Directory.Exists(savepath + @"\Enclosure\") == false) + { + Directory.CreateDirectory(savepath + @"\Enclosure\"); + } + + if (System.IO.File.Exists(savepath + @"\Enclosure\" + fileName)) + { + System.IO.File.Delete(savepath + @"\Enclosure\" + fileName); + } + FileStream fs = new FileStream(savepath + @"\Enclosure\" + fileName, FileMode.CreateNew); + BinaryWriter bw = new BinaryWriter(fs); + bw.Write(buff, 0, buff.Length); + bw.Close(); + fs.Close(); + } + catch (Exception) + { + } + + } + private int GetBodyIndex(byte[] data) + { + var index = -1; + for (int i = 0, c = data.Length; i < c; i++) + { + var elem = data[i]; + if (elem == '\r' && i + 3 < data.Length && data[i + 1] == '\n' && data[i + 2] == '\r' && data[i + 3] == '\n') + { + index = i + 4; + break; + } + } + return index; + } + private string GetGetUrl(string url, JObject jObject) + { + if (!url.Contains("?")) url += "?1=1"; + var jParam = jObject["Param"]; + if (jParam != null) + { + var Param = Newtonsoft.Json.JsonConvert.DeserializeObject>(jParam.ToString()); + foreach (var item in Param) + { + url += $"&{item.Key}={item.Value}"; + } + } + + var jdata = jObject["Data"]; + if (jdata != null) + { + var Data = Newtonsoft.Json.JsonConvert.DeserializeObject>(jdata.ToString()); + foreach (var item in Data) + { + if (item.Value is JArray) + { + foreach (var arr in (JArray)item.Value) + { + url += $"&{item.Key}={arr}"; + } + } + else if (item.Value is JObject) + url += $"&{item.Key}={Newtonsoft.Json.JsonConvert.SerializeObject(item.Value)}"; + else if (item.Value != null && !string.IsNullOrWhiteSpace(item.Value.ToString())) + url += $"&{item.Key}={item.Value}"; + } + } + return url; + } + private static PropertyInfo InnerCollectionProperty = typeof(WebHeaderCollection).GetProperty("InnerCollection", + System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); + + public static void SetHeaderValue(WebHeaderCollection header, string name, string value) + { + var collection = InnerCollectionProperty.GetValue(header, null) as NameValueCollection; + collection[name] = value; + } + + private void SetHead(HttpRequestPart httprequest, JToken head) + { + var dic = new Dictionary(); + if (head != null) + { + foreach (JProperty elem in head) + { + var name = elem.Name; + var value = elem.Value.ToString(); + dic.Add(name, value); + } + } + httprequest.SetHeaders(dic); + } + + private void SetHead(HttpWebRequest httpWebRequest, string method, string headStr) + { + httpWebRequest.Method = method; + var headStrSplitResult = headStr.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var elem in headStrSplitResult) + { + var keyValue = elem.Split(':'); + var name = keyValue[0]; + var value = keyValue[1]; + if ("Accept-Encoding".Equals(name, StringComparison.OrdinalIgnoreCase)) + { + httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip; + } + SetHeaderValue(httpWebRequest.Headers, name, value); + } + /*if ("post".Equals(method, StringComparison.OrdinalIgnoreCase)) + { + if (String.IsNullOrWhiteSpace(httpWebRequest.ContentType)) + { + httpWebRequest.ContentType = "application/x-www-form-urlencoded"; + } + }*/ + } + + private void SetPostRequestStream(HttpWebRequest httpWebRequest, Stream requestStream, JObject jObject, Encoding encoding) + { + using (var streamWrite = new StreamWriter(requestStream, encoding)) + { + var param = jObject["Param"]?.Value() ?? String.Empty; + if (!string.IsNullOrEmpty(param)) + streamWrite.Write(param); + + var jdata = jObject["Data"]; + if (jdata != null) + { + var Data = jdata.ToString(); + var _bytes = encoding.GetBytes(Data); + httpWebRequest.ContentLength = _bytes.Length; + requestStream.Write(_bytes, 0, _bytes.Length); + } + } + } + + private static readonly string[] TextContentTypes = new string[] { "application/json", "text/html" }; + + private object GetResponse(HttpWebRequest httpWebRequest, Encoding encoding) + { + var response = httpWebRequest.GetResponse(); + using (var stream = response.GetResponseStream()) + { + if (IsTextContentType(response.ContentType)) + { + using (StreamReader streamReader = new StreamReader(stream, encoding)) + { + var r = streamReader.ReadToEnd(); + + return r; + } + } + else + { + using (MemoryStream ms = new MemoryStream()) + { + stream.CopyTo(ms); + return ms.ToArray(); + } + } + } + } + + private bool IsTextContentType(string contentType) + { + if (contentType == null) return true; + contentType = contentType.ToLower(); + var list = new string[] { "text/", "application/json", "application/xml" }; + return list.Any(m => contentType.Contains(m)); + } + } +} diff --git a/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/RequestWaysHelp.cs b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/RequestWaysHelp.cs new file mode 100644 index 0000000..35ee5f2 --- /dev/null +++ b/93_nei_core/Getf_Service_Transfer_Client_Service_HttpHandler/RequestWaysHelp.cs @@ -0,0 +1,289 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Json; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.TagHelpers; +using Newtonsoft.Json.Linq; + +namespace Getf_Service_Transfer_Client_Service_HttpHandler +{ + /// + /// 总结各种请求方式 + /// + public class RequestWaysHelp + { + #region 01-WebClient的Get请求 + /// + /// WebClient的Get请求 + /// + /// 请求地址,含拼接数据,请求格式为:"http://XXXX?userName=admin&pwd=123456"; + /// + public static string WcGet(string url) + { + WebClient wc = new WebClient(); + wc.Encoding = Encoding.UTF8; + return wc.DownloadString(url); + } + #endregion + + #region 02-WebClient的Post请求 + /// + /// WebClient的Post请求 + /// 表单提交模式[application/x-www-form-urlencoded] + /// + /// 请求地址,单纯的地址,没有数据拼接 + /// 请求数据,格式为:"userName=admin&pwd=123456" + /// + public static string WcPost1(string url, string data) + { + WebClient wc = new WebClient(); + wc.Encoding = Encoding.UTF8; + //也可以向表头中添加一些其他东西 + wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + return wc.UploadString(url, data); + } + #endregion + + #region 03-WebClient的Post请求 + /// + /// WebClient的Post请求 + /// Json提交模式[application/json] + /// + /// 请求地址,单纯的地址,没有数据拼接 + /// 请求数据,格式为(Json)对象、或者类对象 eg: new {id="1"} + /// + public static string WcPost2(string url, object data) + { + + WebClient wc = new WebClient(); + wc.Encoding = Encoding.UTF8; + //也可以向表头中添加一些其他东西 + wc.Headers.Add("Content-Type", "application/json"); + return wc.UploadString(url, Newtonsoft.Json.JsonConvert.SerializeObject(data)); + } + #endregion + + #region 04-HttpWebRequest的Get请求 + /// + /// HttpWebRequest的Get请求 + /// + /// 请求地址,含拼接数据,请求格式为:"http://XXXX?userName=admin&pwd=123456"; + /// + public static string HwGet(string url) + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Timeout = 30 * 1000; + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"; + request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; + string result = ""; + using (var res = request.GetResponse() as HttpWebResponse) + { + if (res.StatusCode == HttpStatusCode.OK) + { + StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8); + result = reader.ReadToEnd(); + } + } + return result; + } + #endregion + + #region 05-HttpWebRequest的Post请求 + /// + /// HttpWebRequest的Post请求 + /// 表单提交模式[application/x-www-form-urlencoded] + /// + /// 请求地址,单纯的地址,没有数据拼接 + /// 请求数据,格式为:"userName=admin&pwd=123456" + /// + public static string HwPost1(string url, string data) + { + var request = HttpWebRequest.Create(url) as HttpWebRequest; + request.Timeout = 30 * 1000;//设置30s的超时 + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"; + request.ContentType = "application/x-www-form-urlencoded"; + request.Method = "POST"; + byte[] data2 = Encoding.UTF8.GetBytes(data); + request.ContentLength = data2.Length; + Stream postStream = request.GetRequestStream(); + postStream.Write(data2, 0, data2.Length); + postStream.Close(); + string result = ""; + using (var res = request.GetResponse() as HttpWebResponse) + { + if (res.StatusCode == HttpStatusCode.OK) + { + StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8); + result = reader.ReadToEnd(); + } + } + return result; + } + #endregion + + #region 06-HttpWebRequest的Post请求 + /// + /// HttpWebRequest的Post请求 + /// Json提交模式[application/json] + /// + /// 请求地址,单纯的地址,没有数据拼接 + /// 请求数据,格式为(Json)对象、或者类对象 eg: new {id="1"} + /// + public static string HwPost2(string url, object data) + { + var postData = Newtonsoft.Json.JsonConvert.SerializeObject(data); + var request = HttpWebRequest.Create(url) as HttpWebRequest; + request.Timeout = 30 * 1000; //设置30s的超时 + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"; + request.ContentType = "application/json"; + request.Method = "POST"; + byte[] data2 = Encoding.UTF8.GetBytes(postData); + request.ContentLength = data2.Length; + Stream postStream = request.GetRequestStream(); + postStream.Write(data2, 0, data2.Length); + postStream.Close(); + string result = ""; + using (var res = request.GetResponse() as HttpWebResponse) + { + if (res.StatusCode == HttpStatusCode.OK) + { + StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8); + result = reader.ReadToEnd(); + } + } + return result; + } + #endregion + + #region 07-HttpClient的Get请求 + /// + /// HttpClient的Get请求 + /// + ///请求地址,含拼接数据,请求格式为:"http://XXXX?userName=admin&pwd=123456"; + /// + public static async Task HcGet(string url) + { + var http = HttpClientFactory2.GetHttpClient(); + var response1 = await http.GetAsync(url); + return await response1.Content.ReadAsStringAsync(); + } + #endregion + + #region 08-HttpClient的Post请求 + /// + /// HttpClient的Post请求 + /// 表单提交模式[application/x-www-form-urlencoded] + /// + /// 请求地址,单纯的地址,没有数据拼接 + /// 请求数据,格式为:"userName=admin&pwd=123456" + /// + public static async Task HcPost(string url, string data) + { + var http = HttpClientFactory2.GetHttpClient(); + var content = new StringContent(data, Encoding.UTF8, "application/x-www-form-urlencoded"); + var response = await http.PostAsync(url, content); + return await response.Content.ReadAsStringAsync(); + } + #endregion + + #region 09-HttpClient的Post请求 + /// + /// HttpClient的Post请求 + /// Json提交模式[application/json] + /// + /// 请求地址,单纯的地址,没有数据拼接 + /// 请求数据,格式为(Json)对象、或者类对象 eg: new {id="1"} + /// + public async static Task HcPost(string url, object data) + { + var http = HttpClientFactory2.GetHttpClient(); + var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"); + var response = await http.PostAsync(url, content); + return await response.Content.ReadAsStringAsync(); + } + #endregion + public static async Task Request(string url, string method, JToken head, JToken data) + { + if (method.ToUpper().Trim() == "GET") + return await HcGet(url); + var http = HttpClientFactory2.GetHttpClient(); + if (data == null) + { + data = ""; + } + var content = new StringContent(data.ToString(), Encoding.UTF8, "application/json"); + SetHead(http, method.ToUpper(), head); + var response = await http.PostAsync(url, content); + return await response.Content.ReadAsStringAsync(); + } + public static async Task Request(string url, string method, JToken head, List listbytes) + { + if (method.ToUpper().Trim() == "GET") + return await HcGet(url); + var http = HttpClientFactory2.GetHttpClient(); + var formdata = new MultipartFormDataContent(); + foreach (var item in listbytes) + { + if (item.Length > 0) + { + var byteContent = new ByteArrayContent(item); + formdata.Add(byteContent); + } + } + SetHead(http, method.ToUpper(), head); + var response = await http.PostAsync(url, formdata); + return await response.Content.ReadAsStringAsync(); + } + + private static void SetHead(HttpClient http, string method, JToken head) + { + if (head != null) + { + foreach (JProperty elem in head) + { + var name = elem.Name; + var value = elem.Value.ToString(); + http.DefaultRequestHeaders.Add(name, value); + } + } + } + + } + + /// + /// 将HttpClient做成单例的,不用Using,全局只有一个 + /// 来解决tcp连接不能释放的问题 + /// + public class HttpClientFactory2 + { + private static HttpClient _httpClient = null; + + /// + /// 静态的构造函数:只能有一个,且是无参数的 + /// 由CLR保证,只有在程序第一次使用该类之前被调用,而且只能调用一次 + /// 说明: keep-alive关键字可以理解为一个长链接,超时时间也可以在上面进行设置,例如10秒的超时时间,当然并发量太大,这个10秒应该会抛弃很多请求 + /// 发送请求的代码没有了using,即这个httpclient不会被手动dispose,而是由系统控制它,当然你的程序重启时,这也就被回收了。 + /// + static HttpClientFactory2() + { + _httpClient = new HttpClient(new HttpClientHandler()); + _httpClient.Timeout = new TimeSpan(0, 0, 10); + _httpClient.DefaultRequestHeaders.Connection.Add("keep-alive"); + } + + /// + /// 对外开放接口 + /// + /// + public static HttpClient GetHttpClient() + { + return _httpClient; + } + } + +} diff --git a/93_nei_core/Getf_Service_Transfer_core_client/Program.cs b/93_nei_core/Getf_Service_Transfer_core_client/Program.cs index 40ec8b2..c04fb4d 100644 --- a/93_nei_core/Getf_Service_Transfer_core_client/Program.cs +++ b/93_nei_core/Getf_Service_Transfer_core_client/Program.cs @@ -44,6 +44,7 @@ namespace Getf_Service_Transfer_core_client }; }); // services.AddHostedService(); + services.AddRemoteRequest(); })//log4net .ConfigureLogging(p => { diff --git a/94_wai/Getf.Service.Transfer.Core/Getf.Service.Transfer.Core.csproj b/94_wai/Getf.Service.Transfer.Core/Getf.Service.Transfer.Core.csproj index 27125a5..5ecac62 100644 --- a/94_wai/Getf.Service.Transfer.Core/Getf.Service.Transfer.Core.csproj +++ b/94_wai/Getf.Service.Transfer.Core/Getf.Service.Transfer.Core.csproj @@ -9,9 +9,10 @@ Properties Getf.Service.Transfer.Core Getf.Service.Transfer.Core - v4.0 + v4.8 512 true + true @@ -21,6 +22,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -29,6 +31,7 @@ TRACE prompt 4 + false diff --git a/94_wai/Getf.Service.Transfer.Core/packages.config b/94_wai/Getf.Service.Transfer.Core/packages.config index 50f97e6..0a14d61 100644 --- a/94_wai/Getf.Service.Transfer.Core/packages.config +++ b/94_wai/Getf.Service.Transfer.Core/packages.config @@ -1,7 +1,7 @@  - - - + + + \ No newline at end of file diff --git a/94_wai/Getf.Service.Transfer.WinService/App.config b/94_wai/Getf.Service.Transfer.WinService/App.config index 3317373..e87be2a 100644 --- a/94_wai/Getf.Service.Transfer.WinService/App.config +++ b/94_wai/Getf.Service.Transfer.WinService/App.config @@ -1,11 +1,11 @@ -
-
+
+
- + diff --git a/94_wai/Getf.Service.Transfer.WinService/Getf.Service.Transfer.WinService.csproj b/94_wai/Getf.Service.Transfer.WinService/Getf.Service.Transfer.WinService.csproj index 27742db..03a9859 100644 --- a/94_wai/Getf.Service.Transfer.WinService/Getf.Service.Transfer.WinService.csproj +++ b/94_wai/Getf.Service.Transfer.WinService/Getf.Service.Transfer.WinService.csproj @@ -8,7 +8,7 @@ WinExe Getf.Service.Transfer.WinService Getf.Service.Transfer.WinService - v4.5 + v4.8 512 true diff --git a/94_wai/Getf.Service.Transfer/App.config b/94_wai/Getf.Service.Transfer/App.config index 1ce7d70..adcf0c0 100644 --- a/94_wai/Getf.Service.Transfer/App.config +++ b/94_wai/Getf.Service.Transfer/App.config @@ -1,13 +1,13 @@ - + -
-
+
+
- - + + @@ -23,59 +23,59 @@ --> - + - - - - - - - + + + + + + + - + - - + + - - - - - - - + + + + + + + - + - - + + - - - - - - - + + + + + + + - + - - + + - \ No newline at end of file + diff --git a/94_wai/Getf.Service.Transfer/Getf.Service.Transfer.csproj b/94_wai/Getf.Service.Transfer/Getf.Service.Transfer.csproj index ccf2b9c..07cecdb 100644 --- a/94_wai/Getf.Service.Transfer/Getf.Service.Transfer.csproj +++ b/94_wai/Getf.Service.Transfer/Getf.Service.Transfer.csproj @@ -8,7 +8,7 @@ Exe Getf.Service.Transfer Getf.Service.Transfer - v4.0 + v4.8 512 true publish\ @@ -26,6 +26,7 @@ false false true + AnyCPU @@ -36,6 +37,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -45,6 +47,7 @@ TRACE prompt 4 + false diff --git a/94_wai/Getf.Service.Transfer/packages.config b/94_wai/Getf.Service.Transfer/packages.config index 0a547ca..22c37e7 100644 --- a/94_wai/Getf.Service.Transfer/packages.config +++ b/94_wai/Getf.Service.Transfer/packages.config @@ -1,6 +1,6 @@  - - + + \ No newline at end of file