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<string, string> 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<string, string> 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<string, string> paramDic = null, Dictionary<string, string> 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<string, string> 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<string, string> paramDic, string logStr,string str, Dictionary<string, string> headerDic = null)
|
{
|
string jsonStr = null;
|
if (paramDic != null && paramDic.Count() > 0)
|
{
|
jsonStr = JsonConvert.SerializeObject(paramDic);
|
}
|
return DoPost(url, jsonStr, logStr,str,headerDic);
|
}
|
|
|
|
|
/// <summary>
|
/// post调用webservice接口
|
/// </summary>
|
/// <param name="url">地址</param>
|
/// <param name="method">方法名称</param>
|
/// <param name="pars">数据参数</param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 将数据插入到 xml文件中
|
/// </summary>
|
/// <param name="Pars"></param>
|
/// <param name="method"></param>
|
/// <param name="xmlName"></param>
|
/// <returns></returns>
|
public static XmlDocument EncodeParsToFuMa(List<string> 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;
|
}
|
}
|
|
/// <summary>
|
/// 将数据插入到MES xml文件中
|
/// </summary>
|
/// <param name="Pars"></param>
|
/// <param name="strValue"></param>
|
/// <param name="xmlName"></param>
|
/// <returns></returns>
|
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 接口传输
|
|
///// <summary>
|
///// post调用webservice接口
|
///// </summary>
|
///// <param name="url">地址</param>
|
///// <param name="method">方法名称</param>
|
///// <param name="pars">数据参数</param>
|
///// <returns></returns>
|
//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;
|
// }
|
//}
|
|
///// <summary>
|
///// 将数据插入到sap xml文件中
|
///// </summary>
|
///// <param name="Pars"></param>
|
///// <param name="method"></param>
|
///// <param name="xmlName"></param>
|
///// <returns></returns>
|
//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;
|
// }
|
//}
|
|
///// <summary>
|
///// 将数据插入到MES xml文件中
|
///// </summary>
|
///// <param name="Pars"></param>
|
///// <param name="strValue"></param>
|
///// <param name="xmlName"></param>
|
///// <returns></returns>
|
//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;
|
// }
|
//}
|
|
///// <summary>
|
///// 写到流中,发送给服务端
|
///// </summary>
|
///// <param name="request">HttpWebRequest连接对象</param>
|
///// <param name="data">要写入连接流发给服务端的内容</param>
|
//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;
|
// }
|
//}
|
|
///// <summary>
|
///// 读取服务端返回的结果
|
///// </summary>
|
//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
|
|
|
}
|
}
|