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