geboshi_V1/LeatherProject/LeatherApp/Utils/HttpUtil.CS
2024-03-07 14:03:22 +08:00

248 lines
10 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
namespace LeatherApp.Utils
{
internal static class HttpUtil
{
/// <summary>
/// 获取本机IP地址列表
/// </summary>
/// <param name="_type">Wireless80211:本地所有IPEthernet:仅获取以太网接口的 IP 地址</param>
public static List<string> getLocalIPList(NetworkInterfaceType _type= NetworkInterfaceType.Wireless80211)
{
List<string> output = new List<string>();
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
output.Add(ip.Address.ToString());
}
}
}
}
return output;
}
//读取请求数据
public static string getPostData(HttpListenerRequest request)
{
if (!request.HasEntityBody)
return null;
string result;
using (Stream inputStream = request.InputStream)
{
using (StreamReader streamReader = new StreamReader(inputStream, Encoding.UTF8))
result = streamReader.ReadToEnd();
}
return result;
}
/// <summary>
/// POST请求接口调用
/// </summary>
/// <param name="url"></param>
/// <param name="json"></param>
/// <returns></returns>
public static void post(string url, string json, Action<JObject> callBack = null)
{
System.Threading.ThreadPool.QueueUserWorkItem(
new WaitCallback(o =>
{
var data = (JObject)o;
if (callBack == null)
postSync(data["url"].ToString(), data["json"].ToString(), false);
else
callBack(postSync(data["url"].ToString(), data["json"].ToString()));
}),
JObject.FromObject(new { url, json })
);
}
//HttpWebRequest方式
public static JObject postSync2(string url, string json, bool recvResp = true)
{
JObject resp = new JObject();
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
//request.ContentType = "application/x-www-form-urlencoded";
request.ContentType = "application /json";
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.UTF8);
requestWriter.Write(json);
requestWriter.Flush();
requestWriter.Close();
if (recvResp)
{
WebResponse webResponse = request.GetResponse();
Stream webStream = webResponse.GetResponseStream();
StreamReader responseReader = new StreamReader(webStream);
resp.Add("data", responseReader.ReadToEnd());
resp.Add("success", true);
}
else
{
request.GetResponse().Close();//必需调用此GetResponse后上面的write才会发送出去
resp.Add("data", "");
resp.Add("success", true);
}
}
catch (Exception ex)
{
resp.Add("success", false);
resp.Add("data", ex.Message);
}
return resp;
}
//HttpClient方式
public static JObject postSync(string url, string json, bool recvResp = true, bool isJson = false)
{
JObject resp = new JObject();
try
{
HttpClient http = new HttpClient();
StringContent dataContent;
//第一种方式data是json格式
if (isJson)
dataContent = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); // {"PageNum":"1","PageSIze":"20","info":"311011500300661"}
else
{
// 第二种方式form表单提交 内容post 提交都在StringContent请求body中添加
string lsUrlEncodeStr = json2Params(JObject.Parse(json));
dataContent = new StringContent(lsUrlEncodeStr, System.Text.Encoding.UTF8, "application/x-www-form-urlencoded"); //PageNum=1&PageSize=20&info=311011500300661
}
http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "token");
var taskstr = http.PostAsync(url, dataContent).Result.Content.ReadAsStringAsync();
API.OutputDebugString("wlq postSync:url=" + url + ";resp=" + taskstr.Result);
//读取返回数据
//return taskstr.Result;
if (recvResp)
{
resp.Add("data", taskstr.Result);
resp.Add("success", true);
}
else
{
resp.Add("data", "");
resp.Add("success", true);
}
}
catch (Exception ex)
{
resp.Add("success", false);
resp.Add("data", ex.Message);
}
return resp;
}
/// <summary>
/// 向HTTP连接写入数据
/// </summary>
/// <param name="resp">HttpListenerContext.Response</param>
/// <param name="data"></param>
/// <returns>如果连接关闭返回 false</returns>
public static bool writeToHttpContext(HttpListenerResponse resp, byte[] dataBuff)
{
try
{
resp.OutputStream.Write(dataBuff, 0, dataBuff.Length);
resp.OutputStream.Flush();
return true;
}
catch (Exception ex)
{
return false;
}
}
public static bool writeToHttpContext_json(HttpListenerResponse resp, string json)
{
byte[] buff = Encoding.UTF8.GetBytes(json);
resp.ContentType = "application/json";
resp.ContentEncoding = Encoding.UTF8;
return writeToHttpContext(resp, buff);
}
public static bool writeToHttpContext_text(HttpListenerResponse resp, string text)
{
byte[] buff = Encoding.UTF8.GetBytes(text);
resp.ContentType = "application/text";
resp.ContentEncoding = Encoding.UTF8;
return writeToHttpContext(resp, buff);
}
private static string json2Params(JObject json)
{
string result = "";
IEnumerable<JProperty> properties = json.Properties();
foreach (JProperty item in properties)
{
result += item.Name.ToString() + "=" + item.Value.ToString() + "&";
// item.Name 为 键
// item.Value 为 值
}
result = result.Substring(0, result.Length - 1);
//string result1 = WebUtility.UrlEncode(result);//转义字符大写
////string result2 = HttpUtility.UrlEncode(result);//转义字符小写
return result;
}
/// <summary>
/// 获取文件对应MIME类型
/// </summary>
/// <param name="fileExtention">文件扩展名,如.jpg</param>
/// <returns></returns>
public static string GetContentType(string fileExtention)
{
if (string.Compare(fileExtention, ".html", true) == 0 || string.Compare(fileExtention, ".htm", true) == 0)
return "text/html;charset=utf-8";
else if (string.Compare(fileExtention, ".js", true) == 0)
return "application/javascript";
else if (string.Compare(fileExtention, ".css", true) == 0)
return "text/css";
else if (string.Compare(fileExtention, ".png", true) == 0)
return "image/png";
else if (string.Compare(fileExtention, ".jpg", true) == 0 || string.Compare(fileExtention, ".jpeg", true) == 0)
return "image/jpeg";
else if (string.Compare(fileExtention, ".gif", true) == 0)
return "image/gif";
else if (string.Compare(fileExtention, ".swf", true) == 0)
return "application/x-shockwave-flash";
else if (string.Compare(fileExtention, ".bcmap", true) == 0)
return "image/svg+xml";
else if (string.Compare(fileExtention, ".properties", true) == 0)
return "application/octet-stream";
else if (string.Compare(fileExtention, ".map", true) == 0)
return "text/plain";
else if (string.Compare(fileExtention, ".svg", true) == 0)
return "image/svg+xml";
else if (string.Compare(fileExtention, ".pdf", true) == 0)
return "application/pdf";
else if (string.Compare(fileExtention, ".txt", true) == 0)
return "text/*";
else if (string.Compare(fileExtention, ".dat", true) == 0)
return "text/*";
else
return "application/octet-stream";//application/octet-stream
}
}
}