using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Text; using System.Xml; using Newtonsoft.Json; namespace Utility.Tools { public class HttpHelper { private static HttpWebRequest GetHttpWebRequest(string url, Dictionary headerDic, string method) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = method; if (headerDic != null && headerDic.Count > 0) { foreach (var h in headerDic) { request.Headers.Add(h.Key, h.Value); } } return request; } private static string GetUrlParamString(Dictionary paramDic) { StringBuilder sb = new StringBuilder(); if (paramDic == null || paramDic.Count() < 1) { return string.Empty; } foreach (var d in paramDic) { if (sb.Length < 1) { sb.AppendFormat("{0}={1}", d.Key, d.Value); } else { sb.AppendFormat("&{0}={1}", d.Key, d.Value); } } sb.Insert(0, "?"); return sb.ToString(); } private static string GetResponseString(HttpWebRequest request) { try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { return reader.ReadToEnd(); } } } catch (WebException ex) { throw ex; } } public static string DoGet(string url, Dictionary paramDic = null, Dictionary headerDic = null) { var paramString = GetUrlParamString(paramDic); var request = GetHttpWebRequest(url + paramString, headerDic, "GET"); request.ContentType = "application/json"; try { return GetResponseString(request); } catch (WebException ex) { throw ex; } } public static string DoPost(string url, string jsonData, string logStr,string str, Dictionary headerDic = null) { var request = GetHttpWebRequest(url, headerDic, "POST"); request.ContentType = "application/json"; request.ContentLength = 0; //log路径 var logStr2 = $@".\log\{str}\{logStr}" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; if (!string.IsNullOrWhiteSpace(jsonData)) { byte[] buffer = Encoding.UTF8.GetBytes(jsonData); request.ContentLength = buffer.Length; try { request.GetRequestStream().Write(buffer, 0, buffer.Length); //记录log LogFile.SaveLogToFile($"{logStr}:( {jsonData} ),", logStr2); } catch (WebException ex) { LogFile.SaveLogToFile($"{logStr}:( {ex.Message} ),", logStr2); throw ex; } } try { var requestData = GetResponseString(request); LogFile.SaveLogToFile($"{logStr}反馈:( {requestData} ),", logStr2); return requestData; } catch (WebException ex) { LogFile.SaveLogToFile($"{logStr}反馈:( {ex.Message} ),", logStr2); throw ex; } } public static string DoPost(string url, Dictionary paramDic, string logStr,string str, Dictionary headerDic = null) { string jsonStr = null; if (paramDic != null && paramDic.Count() > 0) { jsonStr = JsonConvert.SerializeObject(paramDic); } return DoPost(url, jsonStr, logStr,str,headerDic); } /// /// post调用webservice接口 /// /// 地址 /// 方法名称 /// 数据参数 /// public static XmlDocument HttpPostWebService(string url, string method, Hashtable pars, string xmlName, string strValue = "") { try { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url + method); request.Method = "POST"; request.ContentType = @"text/xml;charset=UTF-8"; //request.Headers.Add("Accept-Language", "zh;"); //request.Accept = @"gzip,deflate,br"; //request.UserAgent = @"xml"; //request.PreAuthenticate = true; //request.AllowWriteStreamBuffering = false; //request.SendChunked = false; //request.KeepAlive = false; //request.Credentials = CredentialCache.DefaultCredentials; request.Timeout = int.MaxValue; // 毫秒 //byte[] data; XmlDocument data; if (xmlName.Contains("MES")) { request.Headers.Add("SOAPAction", @"http://tempuri.org/ITransferService/TransferMessageForMagic"); data = MesEncodeParsToSap(strValue, xmlName); } else { data = MesEncodeParsToSap(strValue, xmlName); //data = EncodeParsToFuMa(pars, method, xmlName); } //WriteRequestData(request, data);//将处理成字节组的XML写到流中发送到服务端 //XmlDocument doc = ReadXmlResponse(request.GetResponse());//读取服务端返回的结果 return data; } catch (Exception ex) { throw ex; } } /// /// 将数据插入到 xml文件中 /// /// /// /// /// public static XmlDocument EncodeParsToFuMa(List Pars, string method, string xmlName) { try { XmlDocument xml = null; var str = $"Utility.XML.{xmlName}.xml"; //从资源文件得到文件流 Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(str); if (stream == null) { throw new Exception("未找到Xml文件流"); } xml = new XmlDocument(); xml.Load(stream); XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable); nsmgr.AddNamespace("xsi", @"http://www.w3.org/2001/XMLSchema-instance"); //修改参数的值 foreach (var de in Pars) { string subNode = "DataList/Product/Batch";// + de.Key.ToString(); XmlNode node = xml.SelectSingleNode(subNode, nsmgr); if (de != null) { XmlNode createNode = xml.CreateNode(XmlNodeType.Element, "Data", ""); XmlAttribute attr = xml.CreateAttribute("code"); attr.Value = de; createNode.Attributes.Append(attr); node.AppendChild(createNode); } } //xml.Save("ceshi.xml"); //byte[] buffer = Encoding.UTF8.GetBytes(xml.InnerXml); return xml; } catch (Exception ex) { throw ex; } } /// /// 将数据插入到MES xml文件中 /// /// /// /// /// public static XmlDocument MesEncodeParsToSap(string strValue, string xmlName) { try { XmlDocument xml = null; //从资源文件得到文件流 Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Utility.XML." + xmlName + ".xml"); xml = new XmlDocument(); xml.Load(stream); XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable); nsmgr.AddNamespace("soapenv", @"http://schemas.xmlsoap.org/soap/envelope/"); nsmgr.AddNamespace("tem", @"http://tempuri.org/"); string subNode = "soapenv:Envelope/soapenv:Body/tem:TransferMessageForMagic/tem:message"; XmlNode node = xml.SelectSingleNode(subNode, nsmgr); node.InnerText = strValue; //byte[] buffer = Encoding.UTF8.GetBytes(xml.InnerXml); return xml; } catch (Exception ex) { throw ex; } } #region xml 接口传输 ///// ///// post调用webservice接口 ///// ///// 地址 ///// 方法名称 ///// 数据参数 ///// //public static XmlDocument HttpPostWebService(string url, string method, Hashtable pars, string xmlName, string strValue = "") //{ // try // { // HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url + method); // request.Method = "POST"; // request.ContentType = @"text/xml;charset=UTF-8"; // //request.Headers.Add("Accept-Language", "zh;"); // //request.Accept = @"gzip,deflate,br"; // //request.UserAgent = @"xml"; // //request.PreAuthenticate = true; // //request.AllowWriteStreamBuffering = false; // //request.SendChunked = false; // //request.KeepAlive = false; // //request.Credentials = CredentialCache.DefaultCredentials; // request.Timeout = int.MaxValue; // 毫秒 // byte[] data; // if (xmlName.Contains("MES")) // { // request.Headers.Add("SOAPAction", @"http://tempuri.org/ITransferService/TransferMessageForMagic"); // data = MesEncodeParsToSoap(strValue, xmlName); // } // else // { // data = EncodeParsToSoap(pars, method, xmlName); // } // WriteRequestData(request, data);//将处理成字节组的XML写到流中发送到服务端 // XmlDocument doc = ReadXmlResponse(request.GetResponse());//读取服务端返回的结果 // return doc; // } // catch (Exception ex) // { // throw ex; // } //} ///// ///// 将数据插入到sap xml文件中 ///// ///// ///// ///// ///// //private static byte[] EncodeParsToSoap(Hashtable Pars, string method, string xmlName) //{ // try // { // XmlDocument xml = null; // //从资源文件得到文件流 // Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Utility.XML." + xmlName + ".xml"); // xml = new XmlDocument(); // xml.Load(stream); // //修改参数的值 // foreach (DictionaryEntry de in Pars) // { // XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable); // nsmgr.AddNamespace("soapenv", @"http://schemas.xmlsoap.org/soap/envelope/"); // nsmgr.AddNamespace("zcib", @"http://zcibp.com.cn/"); // Hashtable subpars = de.Value as Hashtable; // if (subpars == null) // { // string subNode = "soapenv:Envelope/soapenv:Body/zcib:SAPMM_" + xmlName + "/DATA/" + de.Key.ToString(); // if (xmlName == "RDATA009" || xmlName == "RDATA011" || xmlName == "RDATA016") // { // subNode = "soapenv:Envelope/soapenv:Body/zcib:SAPPP_" + xmlName + "/DATA/" + de.Key.ToString(); // } // XmlNode node = xml.SelectSingleNode(subNode, nsmgr); // if (de.Value != null) // { // node.InnerText = de.Value.ToString(); // } // else // { // node.InnerText = ""; // } // } // else // { // foreach (DictionaryEntry subde in subpars) // { // string subNode = "soapenv:Envelope/soapenv:Body/zcib:SAPMM_" + xmlName + "/DATA/" + de.Key.ToString() + "/" + subde.Key.ToString(); // if (xmlName == "RDATA009" || xmlName == "RDATA011" || xmlName == "RDATA016") // { // subNode = "soapenv:Envelope/soapenv:Body/zcib:SAPPP_" + xmlName + "/DATA/" + de.Key.ToString() + "/" + subde.Key.ToString(); // } // XmlNode node = xml.SelectSingleNode(subNode, nsmgr); // if (subde.Value != null) // { // node.InnerText = subde.Value.ToString(); // } // else // { // node.InnerText = ""; // } // } // } // } // byte[] buffer = Encoding.UTF8.GetBytes(xml.InnerXml); // return buffer; // } // catch (Exception ex) // { // throw ex; // } //} ///// ///// 将数据插入到MES xml文件中 ///// ///// ///// ///// ///// //private static byte[] MesEncodeParsToSoap(string strValue, string xmlName) //{ // try // { // XmlDocument xml = null; // //从资源文件得到文件流 // Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Utility.XML." + xmlName + ".xml"); // xml = new XmlDocument(); // xml.Load(stream); // XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable); // nsmgr.AddNamespace("soapenv", @"http://schemas.xmlsoap.org/soap/envelope/"); // nsmgr.AddNamespace("tem", @"http://tempuri.org/"); // string subNode = "soapenv:Envelope/soapenv:Body/tem:TransferMessageForMagic/tem:message"; // XmlNode node = xml.SelectSingleNode(subNode, nsmgr); // node.InnerText = strValue; // byte[] buffer = Encoding.UTF8.GetBytes(xml.InnerXml); // return buffer; // } // catch (Exception ex) // { // throw ex; // } //} ///// ///// 写到流中,发送给服务端 ///// ///// HttpWebRequest连接对象 ///// 要写入连接流发给服务端的内容 //private static void WriteRequestData(HttpWebRequest request, byte[] data) //{ // try // { // request.ContentLength = data.Length; // Stream writer = request.GetRequestStream(); // writer.Write(data, 0, data.Length); // writer.Close(); // } // catch (Exception ex) // { // throw ex; // } //} ///// ///// 读取服务端返回的结果 ///// //private static XmlDocument ReadXmlResponse(WebResponse response) //{ // try // { // StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); // String retXml = sr.ReadToEnd(); // sr.Close(); // XmlDocument doc = new XmlDocument(); // doc.LoadXml(retXml); // return doc; // } // catch (Exception ex) // { // throw ex; // } //} #endregion } }