using Microsoft.IdentityModel.Logging; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Cache; using System.Net; using System.Text; using System.Threading.Tasks; using System.Web; using Elight.Utility.logs; namespace Elight.Utility { public class HttpHelper { public static string Post(string url, object obj_model) { ServicePointManager.DefaultConnectionLimit = 200; return Post(url, obj_model, out string error); } /// /// 提交Post数据 json /// /// /// /// /// public static string Post(string sUrl, dynamic obj_model, out string ErrMsg) { string sPostData = JsonConvert.SerializeObject(obj_model); ErrMsg = sPostData; if (string.IsNullOrEmpty(sUrl)) return "{}"; Encoding myEncoding = Encoding.UTF8; string sMode = "POST"; sPostData = sPostData.Replace("_params", "params"); string sContentType = "application/json"; HttpWebRequest req = null; HttpWebResponse res = null; try { req = HttpWebRequest.Create(sUrl) as HttpWebRequest; req.Method = sMode; req.Accept = "*/*"; req.KeepAlive = true; req.Timeout = 70000; req.ReadWriteTimeout = 300000; req.ServicePoint.Expect100Continue = false; req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); if (0 == string.Compare("POST", sMode)) { byte[] bufPost = myEncoding.GetBytes(sPostData); req.ContentType = sContentType; req.ContentLength = bufPost.Length; using (Stream newStream = req.GetRequestStream()) { newStream.Write(bufPost, 0, bufPost.Length); } } res = req.GetResponse() as HttpWebResponse; req.Abort(); var re = ""; using (Stream resStream = res.GetResponseStream()) { using (StreamReader resStreamReader = new StreamReader(resStream, myEncoding)) { re = resStreamReader.ReadToEnd(); } } res.Close(); return re; } catch (System.Net.WebException ex) { Encoding encoding = Encoding.UTF8; var strResponse = GetResponseAsString((System.Net.HttpWebResponse)ex.Response, encoding);//这样获取web服务器返回数据 ErrMsg = ex.Message; LogService.WriteLog(ex, "接口调用"); return "{\"Message\":\"" + ErrMsg + "\",\"IsSucceed\":false}"; } finally { if (req != null) { req.Abort(); req = null; } if (res != null) { res.Close(); res.Dispose(); req = null; } } } /// /// 提交Post数据 json 7000毫秒停止 /// /// /// /// /// public static string Post6000(string sUrl, dynamic obj_model, out string ErrMsg) { string sPostData = JsonConvert.SerializeObject(obj_model); ErrMsg = sPostData; if (string.IsNullOrEmpty(sUrl)) return "{}"; Encoding myEncoding = Encoding.UTF8; string sMode = "POST"; sPostData = sPostData.Replace("_params", "params"); string sContentType = "application/json"; HttpWebRequest req = null; HttpWebResponse res = null; try { req = HttpWebRequest.Create(sUrl) as HttpWebRequest; req.Method = sMode; req.Accept = "*/*"; req.KeepAlive = true; req.Timeout = 6000; req.ReadWriteTimeout = 300000; req.ServicePoint.Expect100Continue = false; req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); if (0 == string.Compare("POST", sMode)) { byte[] bufPost = myEncoding.GetBytes(sPostData); req.ContentType = sContentType; req.ContentLength = bufPost.Length; using (Stream newStream = req.GetRequestStream()) { newStream.Write(bufPost, 0, bufPost.Length); } } res = req.GetResponse() as HttpWebResponse; req.Abort(); var re = ""; using (Stream resStream = res.GetResponseStream()) { using (StreamReader resStreamReader = new StreamReader(resStream, myEncoding)) { re = resStreamReader.ReadToEnd(); } } res.Close(); return re; } catch (System.Net.WebException ex) { Encoding encoding = Encoding.UTF8; var strResponse = GetResponseAsString((System.Net.HttpWebResponse)ex.Response, encoding);//这样获取web服务器返回数据 ErrMsg = ex.Message; LogService.WriteLog(ex, "接口调用"); return "{\"Message\":\"" + ErrMsg + "\",\"IsSucceed\":false}"; } finally { if (req != null) { req.Abort(); req = null; } if (res != null) { res.Close(); res.Dispose(); req = null; } } } /// /// 提交Post数据 byte[] /// /// /// Base64字符串 /// /// public static string PostBytes(string sUrl, string postBase64String, out string ErrMsg) { ErrMsg = postBase64String; if (string.IsNullOrEmpty(sUrl)) return "{}"; Encoding myEncoding = Encoding.UTF8; string sMode = "POST"; string sContentType = "application/json"; HttpWebRequest req = null; HttpWebResponse res = null; try { req = HttpWebRequest.Create(sUrl) as HttpWebRequest; req.Method = sMode; req.Accept = "*/*"; req.KeepAlive = true; req.Timeout = 70000; req.ReadWriteTimeout = 300000; req.ServicePoint.Expect100Continue = false; req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); if (0 == string.Compare("POST", sMode)) { byte[] bufPost = Convert.FromBase64String(postBase64String); req.ContentType = sContentType; req.ContentLength = bufPost.Length; using (Stream newStream = req.GetRequestStream()) { newStream.Write(bufPost, 0, bufPost.Length); } } res = req.GetResponse() as HttpWebResponse; req.Abort(); var re = ""; using (Stream resStream = res.GetResponseStream()) { using (var mstream = new MemoryStream()) { resStream.CopyTo(mstream); re = Convert.ToBase64String(mstream.ToArray()); } } res.Close(); return re; } catch (Exception ex) { ErrMsg = ex.Message; LogService.WriteLog(ex, "接口调用"); return "{\"Message\":\"" + ErrMsg + "\",\"IsSucceed\":false}"; } finally { if (req != null) { req.Abort(); req = null; } if (res != null) { res.Close(); res.Dispose(); req = null; } } } /// /// 发送数据 /// /// /// /// public static string Post(string url, Dictionary dic, out string ErrMsg) { string result = ""; ErrMsg = ""; HttpWebResponse resp = null; try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Timeout = 70000; req.ReadWriteTimeout = 300000; req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; #region 添加Post 参数 StringBuilder builder = new StringBuilder(); int i = 0; foreach (var item in dic) { if (i > 0) builder.Append("&"); builder.AppendFormat("{0}={1}", item.Key, item.Value); i++; } byte[] data = Encoding.UTF8.GetBytes(builder.ToString()); req.ContentLength = data.Length; using (Stream reqStream = req.GetRequestStream()) { reqStream.Write(data, 0, data.Length); reqStream.Close(); } #endregion resp = (HttpWebResponse)req.GetResponse(); Stream stream = resp.GetResponseStream(); //获取响应内容 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { result = reader.ReadToEnd(); } return result; } catch (Exception ex) { ErrMsg = ex.Message; return "{\"Message\":\"" + ErrMsg + "\",\"IsSucceed\":false}"; } finally { if (resp != null) resp.Close(); } } /// /// 提交Post数据 file /// /// /// /// /// public static string Post(string sUrl, Dictionary files, out string ErrMsg) { ErrMsg = "{\"message\":\"文件:" + string.Join(",", files.Keys) + " 上传失败!\",\"code\":-1}"; if (string.IsNullOrEmpty(sUrl)) return "{}"; string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); Encoding myEncoding = Encoding.UTF8; string sMode = "POST"; string sContentType = "multipart/form-data; boundary=" + boundary; HttpWebRequest req; try { req = HttpWebRequest.Create(sUrl) as HttpWebRequest; req.Method = sMode; req.Accept = "*/*"; req.KeepAlive = false; req.Timeout = 1000 * 60 * 2; req.ReadWriteTimeout = 300000; req.Credentials = CredentialCache.DefaultCredentials; req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); if (0 == string.Compare("POST", sMode)) { using (var stream = req.GetRequestStream()) { string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; byte[] buffer = new byte[4096]; int bytesRead = 0; foreach (var file in files) { stream.Write(boundarybytes, 0, boundarybytes.Length); string header = string.Format(headerTemplate, file.Key, Path.GetFileName(file.Key)); byte[] headerbytes = myEncoding.GetBytes(header); stream.Write(headerbytes, 0, headerbytes.Length); while ((bytesRead = file.Value.Read(buffer, 0, buffer.Length)) != 0) { stream.Write(buffer, 0, bytesRead); } } stream.Write(endbytes, 0, endbytes.Length); } } // Response HttpWebResponse res = req.GetResponse() as HttpWebResponse; req.Abort(); var re = ""; using (Stream resStream = res.GetResponseStream()) { using (StreamReader resStreamReader = new StreamReader(resStream, myEncoding)) { re = resStreamReader.ReadToEnd(); } } res.Close(); return re; } catch (Exception ex) { ErrMsg = ex.Message; return "{\"Message\":\"" + ErrMsg + "\",\"IsSucceed\":false}"; } } /// /// GET请求获取信息 /// /// /// public static string Get(string url, int timeout = 70000, List cookies = null) { ServicePointManager.DefaultConnectionLimit = 10; string ret = "{}"; try { HttpWebRequest web = (HttpWebRequest)HttpWebRequest.Create(url); web.Method = "GET"; web.Timeout = timeout; if (cookies != null && cookies.Count > 0) { web.CookieContainer = new CookieContainer(); string host = new Uri(url).Host; foreach (System.Net.Cookie c in cookies) { c.Domain = host; web.CookieContainer.Add(c); } } HttpWebResponse res = (HttpWebResponse)web.GetResponse(); using (Stream s = res.GetResponseStream()) { using (StreamReader sr = new StreamReader(s, Encoding.UTF8)) { ret = sr.ReadToEnd(); } } res.Close(); web.Abort(); } catch (Exception ex) { ret = "{\"Message\":\"" + ex.Message + "\",\"IsSucceed\":false}"; LogService.WriteLog(ex, "接口调用"); } return ret; } public static string Get(string url, Encoding encode, int timeout = 70000, List cookies = null) { ServicePointManager.DefaultConnectionLimit = 10; string ret = "{}"; try { HttpWebRequest web = (HttpWebRequest)HttpWebRequest.Create(url); web.Method = "GET"; web.Timeout = timeout; if (cookies != null && cookies.Count > 0) { web.CookieContainer = new CookieContainer(); string host = new Uri(url).Host; foreach (System.Net.Cookie c in cookies) { c.Domain = host; web.CookieContainer.Add(c); } } HttpWebResponse res = (HttpWebResponse)web.GetResponse(); using (Stream s = res.GetResponseStream()) { using (StreamReader sr = new StreamReader(s, encode)) { ret = sr.ReadToEnd(); } } res.Close(); web.Abort(); } catch (Exception ex) { ret = "{\"Message\":\"" + ex.Message + "\",\"IsSucceed\":false}"; LogService.WriteLog(ex, "接口调用"); } return ret; } public static string Get(string url, Dictionary data, out string errorMsg) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); errorMsg = string.Empty; if (data != null && data.Count > 0) { var urlSb = new StringBuilder(); var flag = 0; foreach (var item in data) { urlSb.Append(flag == 0 ? "?" : "&"); urlSb.Append($"{item.Key}={HttpUtility.UrlEncode(item.Value)}"); flag++; } if (url.EndsWith("/")) { url = url.Substring(0, url.Length - 1); } url += urlSb.ToString(); } try { var web = (HttpWebRequest)WebRequest.Create(url); web.Timeout = 70 * 1000; web.Method = "GET"; web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"; web.Accept = "*/*"; var res = (HttpWebResponse)web.GetResponse(); using var s = res.GetResponseStream(); using var sr = new StreamReader(s, Encoding.GetEncoding("gb2312")); return sr.ReadToEnd(); } catch (Exception e) { Console.WriteLine(e); return string.Empty; } } public static string Get(string url, Dictionary data, out string errorMsg, out string outurl) { outurl = ""; Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); errorMsg = string.Empty; if (data != null && data.Count > 0) { var urlSb = new StringBuilder(); var flag = 0; foreach (var item in data) { urlSb.Append(flag == 0 ? "?" : "&"); urlSb.Append($"{item.Key}={HttpUtility.UrlEncode(item.Value)}"); flag++; } if (url.EndsWith("/")) { url = url.Substring(0, url.Length - 1); } url += urlSb.ToString(); outurl = url; } try { var web = (HttpWebRequest)WebRequest.Create(url); web.Timeout = 70 * 1000; web.Method = "GET"; web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"; web.Accept = "*/*"; var res = (HttpWebResponse)web.GetResponse(); using var s = res.GetResponseStream(); using var sr = new StreamReader(s, Encoding.GetEncoding("gb2312")); return sr.ReadToEnd(); } catch (Exception e) { Console.WriteLine(e); return string.Empty; } } public static string Get(string url, Dictionary data, Encoding encode, out string errorMsg) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); errorMsg = string.Empty; if (data != null && data.Count > 0) { var urlSb = new StringBuilder(); var flag = 0; foreach (var item in data) { urlSb.Append(flag == 0 ? "?" : "&"); urlSb.Append($"{item.Key}={HttpUtility.UrlEncode(item.Value)}"); flag++; } if (url.EndsWith("/")) { url = url.Substring(0, url.Length - 1); } url += urlSb.ToString(); } try { var web = (HttpWebRequest)WebRequest.Create(url); web.Timeout = 70 * 1000; web.Method = "GET"; web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"; web.Accept = "*/*"; var res = (HttpWebResponse)web.GetResponse(); using var s = res.GetResponseStream(); using var sr = new StreamReader(s, encode); return sr.ReadToEnd(); } catch (Exception e) { Console.WriteLine(e); return string.Empty; } } private static string GetResponseAsString(HttpWebResponse res, Encoding encoding) { try { if (res != null) { StreamReader sr = new StreamReader(res.GetResponseStream(), encoding); return sr.ReadToEnd(); } else { return "{\"Message\":\"空响应\",\"IsSucceed\":false}"; ; } } catch (Exception ex) { return ""; } } } }