using Newtonsoft.Json; using Org.BouncyCastle.Ocsp; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Security.Cryptography; using System.Text; using static HH.WCS.DaYang.api.ApiModel; namespace HH.WCS.DaYang.util { public class HttpHelper { public string WebPost(string url, string postData, string cotentType = "application/json") { Console.WriteLine(url); WebRequest request = WebRequest.Create(url); request.Method = "POST"; //string postData = JsonConvert.SerializeObject(data); ; byte[] byteArray = Encoding.UTF8.GetBytes(postData); request.ContentType = cotentType; request.ContentLength = byteArray.Length; request.Timeout = 3000; try { Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); WebResponse response = request.GetResponse(); //Console.WriteLine(((HttpWebResponse)response).StatusDescription); dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream, Encoding.UTF8); string responseFromServer = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); return responseFromServer; } catch (Exception e) { Console.WriteLine(e.Message); return ""; } } public string WebPostMobox(string url, string postData, string cotentType = "application/json") { Console.WriteLine(url); WebRequest request = WebRequest.Create(url); request.Method = "POST"; //string postData = JsonConvert.SerializeObject(data); ; byte[] byteArray = Encoding.UTF8.GetBytes(postData); request.ContentType = cotentType; request.ContentLength = byteArray.Length; request.Timeout = 3000; string appkey = "OpenInfo"; //获取ReqVerify var AppKey = Settings.AppKey; var AppSecret = Settings.AppSecret; //获取时间戳 var ReqTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); //var ReqTime = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} "); LogHelper.Info($"地址:{url},内容:{postData}"); var ReqVerify = GetMd5FromString(AppKey + AppSecret + ReqTime); LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} ReqVerify={ReqVerify} url={url} req={postData}"); request.Headers.Add("ReqTime", ReqTime.ToString()); request.Headers.Add("ReqVerify", ReqVerify); request.Headers.Add("AppKey", appkey); try { Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); WebResponse response = request.GetResponse(); //Console.WriteLine(((HttpWebResponse)response).StatusDescription); dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream, Encoding.UTF8); string responseFromServer = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); return responseFromServer; } catch (Exception e) { Console.WriteLine(e.Message); return ""; } } /// /// MD5加密 /// /// /// public static string GetMd5FromString(string sInput) { var lstData = Encoding.GetEncoding("utf-8").GetBytes(sInput); var lstHash = new MD5CryptoServiceProvider().ComputeHash(lstData); var result = new StringBuilder(32); for (int i = 0; i < lstHash.Length; i++) { result.Append(lstHash[i].ToString("x2").ToUpper()); } return result.ToString(); } public string WebGet(string url) { //using (var client = new HttpClient()) { // //请求结果 // string result = client.GetAsync(url).Result.Content.ReadAsStringAsync().Result; // Console.WriteLine(result); // return result; //} //Console.WriteLine(url); WebRequest request = WebRequest.Create(url); request.Timeout = 6000; request.Method = "GET"; try { WebResponse response = request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); Console.WriteLine(responseFromServer); return responseFromServer; } catch (Exception e) { return ""; } } public string Get(string url, string contentType = "application/x-www-form-urlencoded") { WebRequest request = WebRequest.Create(url); request.Method = "Get"; request.ContentType = contentType; StreamReader reader = null; Stream stream = null; WebResponse rsp = null; try { rsp = request.GetResponse(); stream = rsp.GetResponseStream(); reader = new StreamReader(stream); return reader.ReadToEnd(); } catch { return ""; } finally { // 释放资源 if (reader != null) reader.Close(); if (stream != null) stream.Close(); if (rsp != null) rsp.Close(); } } public string Post(string url, string postData, string contentType = "application/json", string sessionId = "") { Console.WriteLine(url); WebRequest request = WebRequest.Create(url); request.Method = "POST"; byte[] byteArray = Encoding.UTF8.GetBytes(postData); request.ContentType = contentType; request.ContentLength = byteArray.Length; request.Timeout = 3000; if (sessionId != "") { request.Headers.Set("ASP.NET_SessionId", sessionId); } StreamReader reader = null; Stream stream = null; WebResponse rsp = null; try { stream = request.GetRequestStream(); stream.Write(byteArray, 0, byteArray.Length); stream.Close(); rsp = request.GetResponse(); stream = rsp.GetResponseStream(); reader = new StreamReader(stream); return reader.ReadToEnd(); } catch (Exception ex) { Console.WriteLine($"{url} err={ex.Message}"); return ""; } finally { // 释放资源 if (reader != null) reader.Close(); if (stream != null) stream.Close(); if (rsp != null) rsp.Close(); } } public string Post(string url, Dictionary dic) { var param = dic.Select(a => { return string.Format("{0}={1}", a.Key, a.Value); }).ToList(); return Post(url, string.Join("&", param), "application/x-www-form-urlencoded"); } public string PostWithCookie(string url, string sessinId) { return PostWithCookie(url, "", "", sessinId); } public string PostWithCookie(string url, string postData, string contentType = "application/json", string sessionId = "") { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; byte[] byteArray = Encoding.UTF8.GetBytes(postData); request.ContentType = contentType; request.ContentLength = byteArray.Length; if (sessionId != "") { request.CookieContainer = new CookieContainer(); request.CookieContainer.SetCookies(new Uri("http://" + request.RequestUri.Authority), "ASP.NET_SessionId=" + sessionId); } StreamReader reader = null; Stream stream = null; WebResponse rsp = null; try { stream = request.GetRequestStream(); stream.Write(byteArray, 0, byteArray.Length); stream.Close(); rsp = request.GetResponse(); stream = rsp.GetResponseStream(); reader = new StreamReader(stream); return reader.ReadToEnd(); } catch { return ""; } finally { // 释放资源 if (reader != null) reader.Close(); if (stream != null) stream.Close(); if (rsp != null) rsp.Close(); } } /// /// 获取设备状态 /// /// 货位 /// 地址 public Result GetDeviceStatus(string[] Locs, string url) { //返回信息 Result deviceStatus = new Result(); try { string date = JsonConvert.SerializeObject(Locs); LogHelper.Info($"获取设备状态:地址:{url},内容:{date}"); var r = WebPost(url, date); LogHelper.Info($"获取设备状态:返回内容:{r}"); deviceStatus = JsonConvert.DeserializeObject>(r); if (deviceStatus != null && deviceStatus.Code == 200) { LogHelper.Info($"获取设备状态成功"); } else { LogHelper.Info($"获取设备状态失败=>msg:{deviceStatus.Msg}"); } return deviceStatus; } catch (Exception ex) { LogHelper.Info($"获取设备状态错误:error:{ex.Message},行号:{ex.StackTrace}"); return deviceStatus; } } /// /// 下发任务 /// /// 任务 /// 地址 public Result TaskAssignment(WCSTask task, string url) { //返回信息 Result result = new Result(); try { TaskPushModel taskPushModel = new TaskPushModel(); taskPushModel.From = task.S_START_LOC; taskPushModel.To = task.S_END_LOC; taskPushModel.TaskNo = task.S_CODE; taskPushModel.TaskType = task.S_TYPE; taskPushModel.CntrNo = task.S_CNTR_CODE; string date = JsonConvert.SerializeObject(taskPushModel); LogHelper.Info($"下发任务:地址:{url},内容:{date}"); var r = WebPost(url, date); LogHelper.Info($"下发任务:返回内容:{r}"); result = JsonConvert.DeserializeObject>(r); if (result!=null&&result.Code == 200) { LogHelper.Info($"下发任务成功"); } else { LogHelper.Info($"下发任务失败=>msg:{result.Msg}"); } return result; } catch (Exception ex) { LogHelper.Info($"下发任务=>错误:error:{ex.Message},行号:{ex.StackTrace}"); return result; } } /// /// 任务取消 /// /// 任务 /// 地址 public Result CancelTask(WCSTask task, string url) { //返回信息 Result result = new Result(); try { string taskno=task.S_CODE; string date = JsonConvert.SerializeObject(taskno); LogHelper.Info($"任务取消:地址:{url},内容:{date}"); var r = WebPost(url, date); LogHelper.Info($"任务取消:返回内容:{r}"); result = JsonConvert.DeserializeObject>(r); if (result != null && result.Code == 200) { LogHelper.Info($"任务取消成功"); } else { LogHelper.Info($"任务取消失败=>msg:{result.Msg}"); } return result; } catch (Exception ex) { LogHelper.Info($"任务取消=>错误:error:{ex.Message},行号:{ex.StackTrace}"); return result; } } /// /// 设备状态切换 /// /// /// /// public Result ChangeStatus(string type, string url) { //返回信息 Result result = new Result(); try { ChangeStatusModel changeStatusModel=new ChangeStatusModel(); changeStatusModel.Type = type; changeStatusModel.DeviceNo = "2"; string date = JsonConvert.SerializeObject(changeStatusModel); LogHelper.Info($"设备状态切换:地址:{url},内容:{date}"); var r = WebPost(url, date); LogHelper.Info($"设备状态切换:返回内容:{r}"); result = JsonConvert.DeserializeObject>(r); if (result != null && result.Code == 200) { LogHelper.Info($"设备状态切换成功"); } else { LogHelper.Info($"设备状态切换失败=>msg:{result.Msg}"); } return result; } catch (Exception ex) { LogHelper.Info($"设备状态切换=>错误:error:{ex.Message},行号:{ex.StackTrace}"); return result; } } /// /// 修改任务优先级 /// /// /// /// public Result ChangePriority(string taskno,int priority, string url) { //返回信息 Result result = new Result(); try { ChangePriorityModel model = new ChangePriorityModel(); model.TaskNo = taskno; model.Priority = priority; string date = JsonConvert.SerializeObject(model); LogHelper.Info($"修改任务优先级:地址:{url},内容:{date}"); var r = WebPost(url, date); LogHelper.Info($"修改任务优先级:返回内容:{r}"); result = JsonConvert.DeserializeObject>(r); if (result != null && result.Code == 200) { LogHelper.Info($"修改任务优先级成功"); } else { LogHelper.Info($"修改任务优先级失败=>msg:{result.Msg}"); } return result; } catch (Exception ex) { LogHelper.Info($"修改任务优先级=>错误:error:{ex.Message},行号:{ex.StackTrace}"); return result; } } } }