using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace Common
{
public class KeyValue
{
public string Key;
public string Value;
public string FilePath;
public string ContentType = "*/*";
public KeyValue(string key, string value, string filePath, string contentType)
{
Key = key;
Value = value;
FilePath = filePath;
ContentType = contentType;
}
public KeyValue()
{ }
public KeyValue(string key, string value, string filePath)
{
Key = key;
Value = value;
FilePath = filePath;
}
public KeyValue(string key, string value)
{
Key = key;
Value = value;
}
}
public class ContentType
{
public const string formUrlEncoded = "application/x-www-form-urlencoded";
public const string formData = "form-data";
public const string applicationJson = "application/json";
public const string applicationText = "text/plain";
}
public static class APIHelper
{
//调主窗体的方法,折叠所有的项目
public static event EventHandler SignOutEvent;
//重新登录提示,只提示一次
private static bool b_SignOutEvent = false;
/// <summary>
/// 调用api返回json
/// </summary>
/// <param name="url">api地址</param>
/// <param name="jsonstr">接收参数</param>
/// <param name="type">类型</param>
/// <returns></returns>
public static string HttpApi(string url, string jsonstr, string type, bool isAlert = true)
{
try
{
Encoding encoding = Encoding.UTF8;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
request.Accept = "text/html,application/xhtml+xml,*/*";
request.ContentType = "application/json";
request.Method = type.ToUpper().ToString();
//设置超时时间1000s,有些接口响应时间就如生成底稿
request.Timeout = 1000000;
byte[] buffer = encoding.GetBytes(jsonstr);
request.ContentLength = buffer.Length;
request.Headers.Add("user-work-bench", "workBench");
if (!string.IsNullOrEmpty(LoginUserInfo.CurrentUser.token))
{
request.Headers.Add("token", LoginUserInfo.CurrentUser.token);
}
else
{
try
{
var parms = jsonstr.Split('&');
foreach (var p in parms)
{
if (p.Contains("token"))
{
request.Headers.Add("token", p.Split('=')[1]);
}
}
}
catch { }
}
var mac = Tool.GetMacByNetworkInterface();
request.Headers.Add("code", mac);
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string result = string.Empty;
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
result = reader.ReadToEnd();
}
var items = (JObject)JsonConvert.DeserializeObject(result);
if (!b_SignOutEvent)
{
if ((result.Contains("5011") && result.Contains("异地登")) && isAlert)
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("4011") && (result.Contains("超时登")) && isAlert)
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")) && isAlert)
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")) && isAlert)
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
catch (Exception ex)
{
LogManager.WriteError("HttpApi", "token:" + LoginUserInfo.CurrentUser.token + "请求url:" + url);
var msg = "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
return msg;
}
}
public static async Task<string> HttpApiAwait(string url, string paramStr)
{
return await HttpPostAsync(url, paramStr);
}
public static string HttpApiFile(string url, List<KeyValue> parms)
{
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
var mac = Tool.GetMacByNetworkInterface();
MultipartFormDataContent form = new MultipartFormDataContent();
if (LoginUserInfo.CurrentUser.token != null)
{
parms.Add(new KeyValue("token", LoginUserInfo.CurrentUser.token));
form.Headers.Add("token", LoginUserInfo.CurrentUser.token);
}
else
{
foreach (KeyValue kv in parms)
{
if (kv.Key == "token")
{
form.Headers.Add("token", kv.Value);
}
}
}
form.Headers.Add("user-work-bench", "workBench");
form.Headers.Add("code", mac);
foreach (KeyValue kv in parms)
{
if (kv.FilePath == null)
{
form.Add(new StringContent(kv.Value), kv.Key);
}
else
{
//文件只读,不能上传。所以上传文件,把属性设置未正常模式。
File.SetAttributes(kv.FilePath, FileAttributes.Normal);
using (FileStream fs = new FileStream(kv.FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
byte[] buffur = new byte[fs.Length];
fs.Read(buffur, 0, (int)fs.Length);
form.Add(new ByteArrayContent(buffur, 0, buffur.Length), kv.Key, kv.Value);
}
if (kv.FilePath.Contains(Const.tempPath))
{
File.Delete(kv.FilePath);
}
}
}
string result = string.Empty;
using (var httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromDays(1);
//异步Post
var response = httpClient.PostAsync(url, form).Result;
//输出Http响应状态码
//确保Http响应成功
if (response.IsSuccessStatusCode)
{
//异步读取json
result = response.Content.ReadAsStringAsync().Result;
}
else
{
//异步读取json
result = response.Content.ReadAsStringAsync().Result;
}
}
if (!b_SignOutEvent)
{
if (result.Contains("异地登") && result.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("超时登") && result.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
catch (HttpRequestException ex)
{
LogManager.WriteError("HttpApiPost", "token:" + LoginUserInfo.CurrentUser.token + "请求url:" + url);
var msg = "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
return msg;
}
}
public static string HttpApiDownloadFile(string url, string jsonstr, string type, string fileFullName)
{
try
{
Encoding encoding = Encoding.UTF8;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//webrequest请求api地址
request.KeepAlive = false;
request.Accept = "text/html,application/xhtml+xml,*/*";
request.ContentType = "application/json";
request.Method = type.ToUpper().ToString();//get或者post
byte[] buffer = encoding.GetBytes(jsonstr);
request.ContentLength = buffer.Length;
request.Headers.Add("user-work-bench", "workBench");
if (!string.IsNullOrEmpty(LoginUserInfo.CurrentUser.token))
{
request.Headers.Add("token", LoginUserInfo.CurrentUser.token);
}
else
{
try
{
var parms = jsonstr.Split('&');
foreach (var p in parms)
{
if (p.Contains("token"))
{
request.Headers.Add("token", p.Split('=')[1]);
}
}
}
catch { }
}
var mac = Tool.GetMacByNetworkInterface();
request.Headers.Add("code", mac);
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string result = string.Empty;
using (Stream reader = response.GetResponseStream())
{
if (fileFullName.Length > 259)
{
var guid = Guid.NewGuid().ToString();
var linkName = Const.tempGuidDictory + guid;
var sourcePath = Path.GetDirectoryName(fileFullName);
if (!Directory.Exists(sourcePath))
{
Directory.CreateDirectory(sourcePath);
}
FileUtils.FileMap(linkName, sourcePath);
fileFullName = linkName + "\\" + Path.GetFileName(fileFullName);
}
FileStream fileStream = new FileStream(fileFullName, FileMode.Create, FileAccess.Write);
byte[] bytes = new byte[1024];
int readSize = 0;
while ((readSize = reader.Read(bytes, 0, 1024)) > 0)
{
fileStream.Write(bytes, 0, readSize);
fileStream.Flush();
}
fileStream.Close();
reader.Close();
response.Close();
}
var msg = "{ code:200 ,data: '',msg: 'ok'}";
return msg;
}
catch (Exception ex)
{
LogManager.WriteError("HttpApi", "token:" + LoginUserInfo.CurrentUser.token + "请求url:" + url);
var msg = "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
return msg;
}
}
/// <summary>
/// 下载给定链接的文件,不需要web参数
/// </summary>
/// <param name="url"></param>
/// <param name="filePath"></param>
/// <param name="fileFullName"></param>
/// <returns></returns>
public static bool HttpDownLoadFileRequest(string url, string filePath, string fileFullName)
{
var msg = "{ code:404 ,data: '',msg: '下载失败'}";
try
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
if (response.ContentType.ToLower().Length > 0)
{
using (Stream reader = response.GetResponseStream())
{
using (FileStream writer = new FileStream(filePath + "\\" + fileFullName, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = new byte[1024];
int c = 0;
while ((c = reader.Read(buffer, 0, buffer.Length)) > 0)
{
writer.Write(buffer, 0, c);
}
}
}
}
return true;
}
catch (Exception ex)
{
LogManager.WriteError("HttpDownLoadFileRequest", "token:" + LoginUserInfo.CurrentUser.token + "请求url:" + url);
//msg = "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
return false;
}
}
/// <summary>
/// psot请求 key-value,解决参数过大,优先用这个
/// </summary>
/// <param name="url">请求连接</param>
/// <param name="parms">请求参数 字典类型</param>
/// <param name="statusCode">请求状态码</param>
/// <returns></returns>
public static string HttpPost(string url, Dictionary<string, string> parms)
{
try
{
string result = string.Empty;
//设置Http的正文
var mac = Tool.GetMacByNetworkInterface();
var httpContent = new FormUrlEncodedContent(parms);
httpContent.Headers.Add("token", LoginUserInfo.CurrentUser.token);
httpContent.Headers.Add("user-work-bench", "workBench");
httpContent.Headers.Remove("Content-Type");//必须
httpContent.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//1.根据需求设置
httpContent.Headers.Add("code", mac);
using (var httpClient = new HttpClient())
{
//异步Post
var response = httpClient.PostAsync(url, httpContent).Result;
//输出Http响应状态码
//确保Http响应成功
if (response.IsSuccessStatusCode)
{
//异步读取json
result = response.Content.ReadAsStringAsync().Result;
}
}
if (!b_SignOutEvent)
{
if (result.Contains("异地登") && result.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("超时登") && result.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
catch (HttpRequestException ex)
{
LogManager.WriteError("HttpApiPost", "token:" + LoginUserInfo.CurrentUser.token + "请求url:" + url);
var msg = "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
return msg;
}
}
/// <summary>
/// 使用Stream的方式,将参数附加到post请示
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static string HttpPostByStream(string url, Dictionary<string, string> dic)
{
string result = "";
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Headers.Add("token", LoginUserInfo.CurrentUser.token);
req.Headers.Add("user-work-bench", "workBench");
var mac = Tool.GetMacByNetworkInterface();
req.Headers.Add("code", mac);
#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
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
if (!b_SignOutEvent)
{
if (result.Contains("异地登") && result.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("超时登") && result.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
catch (Exception ex)
{
LogManager.WriteError("", ex.StackTrace);
return result;
}
}
/// <summary>
/// psot请求 key-value,解决参数过大
/// </summary>
/// <param name="url">请求连接</param>
/// <param name="parms">请求参数 字典类型</param>
/// <param name="statusCode">请求状态码</param>
/// <returns></returns>
public static async Task<string> HttpPostAsync(string url, string parms, string contentType = ContentType.formUrlEncoded)
{
try
{
string result = string.Empty;
//设置Http的正文
var mac = Tool.GetMacByNetworkInterface();
string p = parms;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
var httpContent = new StringContent(p, Encoding.UTF8);
httpContent.Headers.Remove("Content-Type");//必须
httpContent.Headers.Add("Content-Type", contentType);//1.根据需求设置
httpContent.Headers.Add("token", LoginUserInfo.CurrentUser.token);
httpContent.Headers.Add("user-work-bench", "workBench");
httpContent.Headers.Add("code", mac);
using (var httpClient = new HttpClient())
{
//异步Post
//var response = httpClient.PostAsync(url, httpContent).Result;
var response = await httpClient.PostAsync(url, httpContent);
//输出Http响应状态码
//确保Http响应成功
if (response.IsSuccessStatusCode)
{
//异步读取json
result = await response.Content.ReadAsStringAsync();
}
}
if (!b_SignOutEvent)
{
if (result.Contains("异地登") && result.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("超时登") && result.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
catch (HttpRequestException ex)
{
LogManager.WriteError("HttpApiPost", "token:" + LoginUserInfo.CurrentUser.token + "请求url:" + url);
var msg = "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
return msg;
}
}
/// <summary>
/// 带cookie执行登录
/// </summary>
/// <param name="url"></param>
/// <param name="jsonstr"></param>
/// <param name="type"></param>
/// <param name="virifyCode"></param>
/// <returns></returns>
public static string LoginHttpApi(string url, string jsonstr, string type, string verifyCode)
{
try
{
Encoding encoding = Encoding.UTF8;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//webrequest请求api地址
request.KeepAlive = false;
request.Accept = "text/html,application/xhtml+xml,*/*";
TryAddCookie(request, new Cookie("mds_code", verifyCode, "/", ".cailian.net"));
request.ContentType = "application/json";
request.Method = type.ToUpper().ToString();//get或者post
request.Headers.Add("user-work-bench", "workBench");
request.Headers.Add("token", LoginUserInfo.CurrentUser.token);
var mac = Tool.GetMacByNetworkInterface();
request.Headers.Add("code", mac);
byte[] buffer = encoding.GetBytes(jsonstr);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
var result = reader.ReadToEnd();
if (!b_SignOutEvent)
{
if (result.Contains("异地登") && result.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("超时登") && result.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
}
catch (Exception ex)
{
return "";
}
}
public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
HttpWebRequest httpRequest = webRequest as HttpWebRequest;
if (httpRequest == null)
{
return false;
}
if (httpRequest.CookieContainer == null)
{
httpRequest.CookieContainer = new CookieContainer();
}
httpRequest.CookieContainer.Add(cookie);
return true;
}
/// <summary>
/// 调用WebApi接口 Get
/// </summary>
/// <typeparam name="T">数据实体类</typeparam>
/// <param name="url"></param>
/// <returns></returns>
public static string HttpApiGet(string url)
{
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
Uri address = new Uri(url);
using (WebClient client = new WebClient())
{
client.Headers.Add("Accept", "application/json");
client.Headers.Add("user-work-bench", "workBench");
client.Headers.Add("token", LoginUserInfo.CurrentUser.token);
client.Headers.Add("Type", "GET");
var mac = Tool.GetMacByNetworkInterface();
client.Headers.Add("code", mac);
client.Encoding = Encoding.UTF8;
string result = client.DownloadString(address);
if (!b_SignOutEvent)
{
if (result.Contains("异地登") && result.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("超时登") && result.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
}
catch (Exception ex)
{
return "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
}
}
public static async Task<string> HttpApiGetAwait(string url)
{
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
Uri address = new Uri(url);
using (WebClient client = new WebClient())
{
client.Headers.Add("Accept", "application/json");
client.Headers.Add("user-work-bench", "workBench");
client.Headers.Add("token", LoginUserInfo.CurrentUser.token);
client.Headers.Add("Type", "GET");
var mac = Tool.GetMacByNetworkInterface();
client.Headers.Add("code", mac);
client.Encoding = Encoding.UTF8;
string result = await client.DownloadStringTaskAsync(address);
if (!b_SignOutEvent)
{
if (result.Contains("异地登") && result.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("超时登") && result.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
}
catch (Exception ex)
{
return "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
}
}
/// <summary>
/// post带文件请求
/// </summary>
/// <param name="url"></param>
/// <param name="files"></param>
/// <param name="data"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string HttpPostWithFile(string url, string[] files, Dictionary<string, string> data)
{
try
{
Encoding encoding = Encoding.UTF8;
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");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("Type", "POST");
request.Headers.Add("user-work-bench", "workBench");
request.Headers.Add("token", LoginUserInfo.CurrentUser.token);
var mac = Tool.GetMacByNetworkInterface();
request.Headers.Add("code", mac);
request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
request.Method = "POST";
request.KeepAlive = true;
request.Accept = "*/*";
request.Credentials = CredentialCache.DefaultCredentials;
using (Stream stream = request.GetRequestStream())
{
string formdataTemplate = "Content-Disposition:form-data;name=\"{0}\"\r\n\r\n{1}";
if (data != null)
{
foreach (string key in data.Keys)
{
stream.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, data[key]);
byte[] formitembytes = encoding.GetBytes(formitem);
stream.Write(formitembytes, 0, formitembytes.Length);
}
}
//上传文件模板
string headerTemplate = "Content-Disposition:form-data;name=\"{0}\";filename=\"{1}\"\r\nContent-Type:application/octet-stream\r\n\r\n";
byte[] buffer = new byte[6 * 1024 * 1024];
for (int i = 0; i < files.Length; i++)
{
stream.Write(boundarybytes, 0, boundarybytes.Length);
string header = string.Format(headerTemplate, "file", Path.GetFileName(files[i]));
byte[] headerbytes = encoding.GetBytes(header);
stream.Write(headerbytes, 0, headerbytes.Length);
using (FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read))
{
int r = fileStream.Read(buffer, 0, buffer.Length);
stream.Write(buffer, 0, r);
}
}
stream.Write(endbytes, 0, endbytes.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader stream = new StreamReader(response.GetResponseStream()))
{
string result = stream.ReadToEnd();
if (!b_SignOutEvent)
{
if (result.Contains("异地登") && result.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("超时登") && result.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("6011") && (result.Contains("登录后使用") || result.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (result.Contains("0002") && (result.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (result.Contains("200"))
{
b_SignOutEvent = false;
}
return result;
}
}
catch (HttpRequestException ex)
{
LogManager.WriteError("HttpPostWithFile", "token:" + LoginUserInfo.CurrentUser.token + "请求url:" + url);
var msg = "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
return msg;
}
}
/// <summary>
/// 使用RestSharp库请示接口(解决传文件乱码的问题)
/// </summary>
/// <param name="url"></param>
/// <param name="files"></param>
/// <param name="data"></param>
/// <returns></returns>
public static string HttpPostWithRestFile(string url, string[] files, Dictionary<string, string> data)
{
try
{
var client = new RestClient(url);
client.Timeout = -1;
var request = new RestRequest();
request.Method = Method.POST;
request.AddHeader("token", LoginUserInfo.CurrentUser.token);
request.AddHeader("user-work-bench", "workBench");
var mac = Tool.GetMacByNetworkInterface();
request.AddHeader("code", mac);
if (data != null)
{
foreach (string key in data.Keys)
{
request.AddParameter(key, data[key]);
}
}
//支持多文件提交
if (files != null && files.Length > 0)
{
for (int i = 0; i < files.Length; i++)
{
request.AddFile("file", files[0]);
}
}
IRestResponse response = client.Execute(request);
if (!b_SignOutEvent)
{
if (response.Content.Contains("异地登") && response.Content.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("超时登") && response.Content.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("6011") && (response.Content.Contains("登录后使用") || response.Content.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("0002") && (response.Content.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (response.Content.Contains("200"))
{
b_SignOutEvent = false;
}
return response.Content;
}
catch (Exception ex)
{
LogManager.WriteError("HttpPostWithRestFile", ex.StackTrace);
return "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
}
}
public static string HttpRestRequest(string url, string method = "POST")
{
try
{
var client = new RestClient(url)
{
Timeout = -1
};
var m = Method.POST;
if (method == "GET")
{
m = Method.GET;
}
var request = new RestRequest(m);
if (!string.IsNullOrEmpty(LoginUserInfo.CurrentUser.token))
{
request.AddHeader("token", LoginUserInfo.CurrentUser.token);
}
else
{
try
{
var parms = url.Split('&');
foreach (var p in parms)
{
if (p.Contains("token"))
{
request.AddHeader("token", p.Split('=')[1]);
}
}
}
catch { }
}
request.AddHeader("user-work-bench", "workBench");
var mac = Tool.GetMacByNetworkInterface();
request.AddHeader("code", mac);
IRestResponse response = client.Execute(request);
if (!b_SignOutEvent)
{
if (response.Content.Contains("异地登") && response.Content.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("超时登") && response.Content.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("6011") && (response.Content.Contains("登录后使用") || response.Content.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("0002") && (response.Content.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (response.Content.Contains("200"))
{
b_SignOutEvent = false;
}
return response.Content;
}
catch (Exception ex)
{
LogManager.WriteError("HttpRestRequest", ex.StackTrace);
return "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
}
}
public static async Task<string> HttpRestRequestAwait(string url, string method = "POST")
{
try
{
var client = new RestClient(url)
{
Timeout = -1
};
var m = Method.POST;
if (method == "GET")
{
m = Method.GET;
}
var request = new RestRequest(m);
if (!string.IsNullOrEmpty(LoginUserInfo.CurrentUser.token))
{
request.AddHeader("token", LoginUserInfo.CurrentUser.token);
}
else
{
try
{
var parms = url.Split('&');
foreach (var p in parms)
{
if (p.Contains("token"))
{
request.AddHeader("token", p.Split('=')[1]);
}
}
}
catch { }
}
request.AddHeader("user-work-bench", "workBench");
var mac = Tool.GetMacByNetworkInterface();
request.AddHeader("code", mac);
IRestResponse response = client.Execute(request);
if (!b_SignOutEvent)
{
if (response.Content.Contains("异地登") && response.Content.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("超时登") && response.Content.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("6011") && (response.Content.Contains("登录后使用") || response.Content.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("0002") && (response.Content.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (response.Content.Contains("200"))
{
b_SignOutEvent = false;
}
return response.Content;
}
catch (Exception ex)
{
LogManager.WriteError("HttpRestRequest", ex.StackTrace);
return "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
}
}
/// <summary>
/// MultipartFormData Post方式提交
/// </summary>
/// <param name="url"></param>
/// <param name="kVDatas"></param>
/// <param name="method"></param>
/// <param name="encoding"></param>
/// <param name="timeOut"></param>
/// <returns></returns>
public static string HttpPostMultipartFormData(string url, Dictionary<string, string> kVDatas, string method = WebRequestMethods.Http.Post, string encoding = "UTF-8", int timeOut = -1)
{
string resultStr = "";
try
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = Encoding.GetEncoding(encoding).GetBytes("\r\n--" + boundary + "\r\n");
byte[] endbytes = Encoding.GetEncoding(encoding).GetBytes("\r\n--" + boundary + "--\r\n");
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.ServerCertificateValidationCallback = delegate (
Object obj, X509Certificate certificate, X509Chain chain,
SslPolicyErrors errors)
{
return (true);
};
//1.HttpWebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = method;
request.KeepAlive = true;
request.Timeout = timeOut;
request.Headers.Add("token", LoginUserInfo.CurrentUser.token);
using (Stream stream = request.GetRequestStream())
{
//1.1 key/value
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
if (kVDatas != null)
{
foreach (string key in kVDatas.Keys)
{
stream.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, kVDatas[key]);
byte[] formitembytes = Encoding.GetEncoding(encoding).GetBytes(formitem);
stream.Write(formitembytes, 0, formitembytes.Length);
}
}
stream.Write(endbytes, 0, endbytes.Length);
}
//2.WebResponse
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader stream = new StreamReader(response.GetResponseStream()))
{
resultStr = stream.ReadToEnd();
}
}
}
catch (WebException ex)
{
LogManager.WriteError("HttpPostMultipartFormData", ex.StackTrace);
return "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
}
if (!b_SignOutEvent)
{
if (resultStr.Contains("异地登") && resultStr.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (resultStr.Contains("超时登") && resultStr.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (resultStr.Contains("6011") && (resultStr.Contains("登录后使用") || resultStr.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (resultStr.Contains("0002") && resultStr.Contains("无权访问"))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (resultStr.Contains("200"))
{
b_SignOutEvent = false;
}
return resultStr;
}
/// <summary>
/// 用于某些接口提交数据,需要将json串直接放到body中的情况(类似saveDraftStatistic接口)
/// </summary>
/// <param name="url"></param>
/// <param name="json"></param>
/// <returns></returns>
public static string HttpPostRestRequest(string url, string json)
{
try
{
var client = new RestClient(url)
{
Timeout = -1
};
var m = Method.POST;
var request = new RestRequest(m);
if (!string.IsNullOrEmpty(LoginUserInfo.CurrentUser.token))
{
request.AddHeader("token", LoginUserInfo.CurrentUser.token);
}
else
{
try
{
var parms = url.Split('&');
foreach (var p in parms)
{
if (p.Contains("token"))
{
request.AddHeader("token", p.Split('=')[1]);
}
}
}
catch { }
}
request.AddHeader("Content-Type", "application/json");
request.AddHeader("user-work-bench", "workBench");
var mac = Tool.GetMacByNetworkInterface();
request.AddHeader("code", mac);
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
if (!b_SignOutEvent)
{
if (response.Content.Contains("异地登") && response.Content.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("超时登") && response.Content.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("6011") && (response.Content.Contains("登录后使用") || response.Content.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("0002") && (response.Content.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (response.Content.Contains("200"))
{
b_SignOutEvent = false;
}
return response.Content;
}
catch (Exception ex)
{
LogManager.WriteError("HttpRestRequest", ex.StackTrace);
return "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
}
}
public static async Task<string> HttpPostRestRequestAwait(string url, string json)
{
try
{
var client = new RestClient(url)
{
Timeout = -1
};
var m = Method.POST;
var request = new RestRequest(m);
if (!string.IsNullOrEmpty(LoginUserInfo.CurrentUser.token))
{
request.AddHeader("token", LoginUserInfo.CurrentUser.token);
}
else
{
try
{
var parms = url.Split('&');
foreach (var p in parms)
{
if (p.Contains("token"))
{
request.AddHeader("token", p.Split('=')[1]);
}
}
}
catch { }
}
request.AddHeader("Content-Type", "application/json");
request.AddHeader("user-work-bench", "workBench");
var mac = Tool.GetMacByNetworkInterface();
request.AddHeader("code", mac);
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
if (!b_SignOutEvent)
{
if (response.Content.Contains("异地登") && response.Content.Contains("5011"))
{
MessageBoxEx.Show("账号异地登录,请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("超时登") && response.Content.Contains("4011"))
{
MessageBoxEx.Show("超时登陆!请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("6011") && (response.Content.Contains("登录后使用") || response.Content.Contains("请登录")))
{
MessageBoxEx.Show("请登录后使用!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (response.Content.Contains("0002") && (response.Content.Contains("无权访问")))
{
MessageBoxEx.Show("请重新登录!");
LoginUserInfo.CurrentUser = null;
b_SignOutEvent = true;
}
if (b_SignOutEvent && SignOutEvent != null)
{
SignOutEvent(null, null);
}
}
else if (response.Content.Contains("200"))
{
b_SignOutEvent = false;
}
return response.Content;
}
catch (Exception ex)
{
LogManager.WriteError("HttpRestRequest", ex.StackTrace);
return "{ code:404 ,data: '',msg: '" + ex.Message + "'}";
}
}
}
}
APIHelper
最新推荐文章于 2024-05-03 22:03:36 发布