bugfix : 解决外网下载文件问题
This commit is contained in:
@@ -4,6 +4,10 @@
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Furion" Version="4.8.6.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Getf_Service_Transfer_Client_coreService\Getf_Service_Transfer_Client_coreService.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -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<JObject>(jsonStr), out string msg);
|
||||
var rData = httpService.DoRequest(url, JsonConvert.DeserializeObject<JObject>(jsonStr), srcData.Data, out string msg);
|
||||
if (rData == null)
|
||||
{
|
||||
r.TransResultInfo = new TransResult()
|
||||
|
||||
@@ -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<JObject>(jsonStr), out string msg);
|
||||
var rData = httpService.DoRequest(url, JsonConvert.DeserializeObject<JObject>(jsonStr), srcData.Data, out string msg);
|
||||
if (rData == null)
|
||||
{
|
||||
r.TransResultInfo = new TransResult()
|
||||
|
||||
@@ -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,20 +48,50 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler
|
||||
{
|
||||
httpWebRequest.ContentType = jObject["ContentType"].Value<string>();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
r = GetResponse(httpWebRequest, encoding);
|
||||
@@ -106,6 +136,50 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/// <summary>
|
||||
/// 将byte数组转换为文件并保存到指定地址
|
||||
/// </summary>
|
||||
/// <param name="buff">byte数组</param>
|
||||
/// <param name="savepath">保存地址</param>
|
||||
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,11 +244,36 @@ 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>() ?? String.Empty;
|
||||
if (!string.IsNullOrEmpty(param))
|
||||
streamWrite.Write(param);
|
||||
|
||||
var jdata = jObject["Data"];
|
||||
|
||||
@@ -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<string>(), 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<string>()));
|
||||
}
|
||||
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;
|
||||
}
|
||||
/// <summary>
|
||||
/// 将byte数组转换为文件并保存到指定地址
|
||||
/// </summary>
|
||||
/// <param name="buff">byte数组</param>
|
||||
/// <param name="savepath">保存地址</param>
|
||||
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<Dictionary<string, object>>(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<Dictionary<string, object>>(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<string, object>();
|
||||
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>() ?? 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// 总结各种请求方式
|
||||
/// </summary>
|
||||
public class RequestWaysHelp
|
||||
{
|
||||
#region 01-WebClient的Get请求
|
||||
/// <summary>
|
||||
/// WebClient的Get请求
|
||||
/// </summary>
|
||||
/// <param name="url">请求地址,含拼接数据,请求格式为:"http://XXXX?userName=admin&pwd=123456";</param>
|
||||
/// <returns></returns>
|
||||
public static string WcGet(string url)
|
||||
{
|
||||
WebClient wc = new WebClient();
|
||||
wc.Encoding = Encoding.UTF8;
|
||||
return wc.DownloadString(url);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 02-WebClient的Post请求
|
||||
/// <summary>
|
||||
/// WebClient的Post请求
|
||||
/// 表单提交模式[application/x-www-form-urlencoded]
|
||||
/// </summary>
|
||||
/// <param name="url">请求地址,单纯的地址,没有数据拼接</param>
|
||||
/// <param name="data">请求数据,格式为:"userName=admin&pwd=123456"</param>
|
||||
/// <returns></returns>
|
||||
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请求
|
||||
/// <summary>
|
||||
/// WebClient的Post请求
|
||||
/// Json提交模式[application/json]
|
||||
/// </summary>
|
||||
/// <param name="url">请求地址,单纯的地址,没有数据拼接</param>
|
||||
/// <param name="data">请求数据,格式为(Json)对象、或者类对象 eg: new {id="1"}</param>
|
||||
/// <returns></returns>
|
||||
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请求
|
||||
/// <summary>
|
||||
/// HttpWebRequest的Get请求
|
||||
/// </summary>
|
||||
/// <param name="url">请求地址,含拼接数据,请求格式为:"http://XXXX?userName=admin&pwd=123456";</param>
|
||||
/// <returns></returns>
|
||||
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请求
|
||||
/// <summary>
|
||||
/// HttpWebRequest的Post请求
|
||||
/// 表单提交模式[application/x-www-form-urlencoded]
|
||||
/// </summary>
|
||||
/// <param name="url">请求地址,单纯的地址,没有数据拼接</param>
|
||||
/// <param name="data">请求数据,格式为:"userName=admin&pwd=123456"</param>
|
||||
/// <returns></returns>
|
||||
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请求
|
||||
/// <summary>
|
||||
/// HttpWebRequest的Post请求
|
||||
/// Json提交模式[application/json]
|
||||
/// </summary>
|
||||
/// <param name="url">请求地址,单纯的地址,没有数据拼接</param>
|
||||
/// <param name="data">请求数据,格式为(Json)对象、或者类对象 eg: new {id="1"}</param>
|
||||
/// <returns></returns>
|
||||
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请求
|
||||
/// <summary>
|
||||
/// HttpClient的Get请求
|
||||
/// </summary>
|
||||
///<param name="url">请求地址,含拼接数据,请求格式为:"http://XXXX?userName=admin&pwd=123456";</param>
|
||||
/// <returns></returns>
|
||||
public static async Task<string> HcGet(string url)
|
||||
{
|
||||
var http = HttpClientFactory2.GetHttpClient();
|
||||
var response1 = await http.GetAsync(url);
|
||||
return await response1.Content.ReadAsStringAsync();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 08-HttpClient的Post请求
|
||||
/// <summary>
|
||||
/// HttpClient的Post请求
|
||||
/// 表单提交模式[application/x-www-form-urlencoded]
|
||||
/// </summary>
|
||||
/// <param name="url">请求地址,单纯的地址,没有数据拼接</param>
|
||||
/// <param name="data">请求数据,格式为:"userName=admin&pwd=123456"</param>
|
||||
/// <returns></returns>
|
||||
public static async Task<string> 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请求
|
||||
/// <summary>
|
||||
/// HttpClient的Post请求
|
||||
/// Json提交模式[application/json]
|
||||
/// </summary>
|
||||
/// <param name="url">请求地址,单纯的地址,没有数据拼接</param>
|
||||
/// <param name="data">请求数据,格式为(Json)对象、或者类对象 eg: new {id="1"}</param>
|
||||
/// <returns></returns>
|
||||
public async static Task<string> 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<string> 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<string> Request(string url, string method, JToken head, List<byte[]> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将HttpClient做成单例的,不用Using,全局只有一个
|
||||
/// 来解决tcp连接不能释放的问题
|
||||
/// </summary>
|
||||
public class HttpClientFactory2
|
||||
{
|
||||
private static HttpClient _httpClient = null;
|
||||
|
||||
/// <summary>
|
||||
/// 静态的构造函数:只能有一个,且是无参数的
|
||||
/// 由CLR保证,只有在程序第一次使用该类之前被调用,而且只能调用一次
|
||||
/// 说明: keep-alive关键字可以理解为一个长链接,超时时间也可以在上面进行设置,例如10秒的超时时间,当然并发量太大,这个10秒应该会抛弃很多请求
|
||||
/// 发送请求的代码没有了using,即这个httpclient不会被手动dispose,而是由系统控制它,当然你的程序重启时,这也就被回收了。
|
||||
/// </summary>
|
||||
static HttpClientFactory2()
|
||||
{
|
||||
_httpClient = new HttpClient(new HttpClientHandler());
|
||||
_httpClient.Timeout = new TimeSpan(0, 0, 10);
|
||||
_httpClient.DefaultRequestHeaders.Connection.Add("keep-alive");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 对外开放接口
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static HttpClient GetHttpClient()
|
||||
{
|
||||
return _httpClient;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -44,6 +44,7 @@ namespace Getf_Service_Transfer_core_client
|
||||
};
|
||||
});
|
||||
// services.AddHostedService<Worker>();
|
||||
services.AddRemoteRequest();
|
||||
})//配置log4net
|
||||
.ConfigureLogging(p =>
|
||||
{
|
||||
|
||||
@@ -9,9 +9,10 @@
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Getf.Service.Transfer.Core</RootNamespace>
|
||||
<AssemblyName>Getf.Service.Transfer.Core</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
@@ -21,6 +22,7 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
@@ -29,6 +31,7 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="2.0.3" targetFramework="net40" />
|
||||
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net40" />
|
||||
<package id="SuperSocket" version="1.6.6.1" targetFramework="net40" />
|
||||
<package id="SuperSocket.Engine" version="1.6.6.1" targetFramework="net40" />
|
||||
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net40" requireReinstallation="true" />
|
||||
<package id="SuperSocket" version="1.6.6.1" targetFramework="net40" requireReinstallation="true" />
|
||||
<package id="SuperSocket.Engine" version="1.6.6.1" targetFramework="net40" requireReinstallation="true" />
|
||||
</packages>
|
||||
@@ -5,7 +5,7 @@
|
||||
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
|
||||
</startup>
|
||||
<appSettings>
|
||||
<add key="IpInfo" value=":9999"/>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>Getf.Service.Transfer.WinService</RootNamespace>
|
||||
<AssemblyName>Getf.Service.Transfer.WinService</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine"/>
|
||||
@@ -78,4 +78,4 @@
|
||||
</filter>
|
||||
</appender>
|
||||
</log4net>
|
||||
</configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>Getf.Service.Transfer</RootNamespace>
|
||||
<AssemblyName>Getf.Service.Transfer</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
@@ -26,6 +26,7 @@
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -36,6 +37,7 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -45,6 +47,7 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="2.0.3" targetFramework="net40" />
|
||||
<package id="SuperSocket" version="1.6.6.1" targetFramework="net40" />
|
||||
<package id="SuperSocket.Engine" version="1.6.6.1" targetFramework="net40" />
|
||||
<package id="SuperSocket" version="1.6.6.1" targetFramework="net40" requireReinstallation="true" />
|
||||
<package id="SuperSocket.Engine" version="1.6.6.1" targetFramework="net40" requireReinstallation="true" />
|
||||
</packages>
|
||||
Reference in New Issue
Block a user