24小时一体机服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

607 lines
23 KiB

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);
}
/// <summary>
/// 提交Post数据 json
/// </summary>
/// <param name="url"></param>
/// <param name="obj_model"></param>
/// <param name="headersdic"></param>
/// <returns></returns>
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;
}
}
}
/// <summary>
/// 提交Post数据 json 7000毫秒停止
/// </summary>
/// <param name="url"></param>
/// <param name="obj_model"></param>
/// <param name="headersdic"></param>
/// <returns></returns>
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;
}
}
}
/// <summary>
/// 提交Post数据 byte[]
/// </summary>
/// <param name="url"></param>
/// <param name="postBase64String">Base64字符串</param>
/// <param name="headersdic"></param>
/// <returns></returns>
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;
}
}
}
/// <summary>
/// 发送数据
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static string Post(string url, Dictionary<string, string> 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();
}
}
/// <summary>
/// 提交Post数据 file
/// </summary>
/// <param name="sUrl"></param>
/// <param name="files"></param>
/// <param name="ErrMsg"></param>
/// <returns></returns>
public static string Post(string sUrl, Dictionary<string, Stream> 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}";
}
}
/// <summary>
/// GET请求获取信息
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string Get(string url, int timeout = 70000, List<System.Net.Cookie> 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<System.Net.Cookie> 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<string, string> 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<string, string> 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<string, string> 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 "";
}
}
}
}