/// <summary>
/// 远程访问相关
/// 版本号:17.08.25.10
/// 作者:王鑫
/// 日期:2017.08.25.10
/// 版本日志:远程访问公共方法详细化
/// </summary>
public class ComWebRequest
{
#region 公共处理
/// <summary>
/// 设置HttpWebRequest请求
/// </summary>
/// <param name="request">HttpWebRequest</param>
/// <param name="dicHeaders">参数键值对</param>
/// <returns>成功:HttpWebRequest实体;失败:null</returns>
public static void SetRequest(HttpWebRequest request, Dictionary<string, string> dicHeaders)
{
if (dicHeaders != null && dicHeaders.Count > 0)
{
foreach (var item in dicHeaders)
{
switch (item.Key.ToLower().Replace("-", ""))
{
case "host":
request.Host = item.Value;
break;
case "keepalive":
request.KeepAlive = Convert.ToBoolean(item.Value.ToLower());
break;
case "accept":
request.Accept = item.Value;
break;
case "useragent":
request.UserAgent = item.Value;
break;
case "referer":
request.Referer = item.Value;
break;
case "automaticdecompression":
request.AutomaticDecompression = item.Value.ToLower() == "gzip" ? DecompressionMethods.GZip : DecompressionMethods.Deflate;//自动解压
break;
case "allowautoredirect":
request.AllowAutoRedirect = Convert.ToBoolean(item.Value.ToLower());//重定向
break;
case "protocolversion":
request.ProtocolVersion = item.Value == "10" ? HttpVersion.Version10 : HttpVersion.Version11;//HTTP版本号
break;
case "webproxy":
if (!string.IsNullOrEmpty(item.Value))
{
string[] strProxys = item.Value.Split('\n');
WebProxy proxy = new WebProxy(strProxys[0]);
if (strProxys.Length == 3)
proxy.Credentials = new NetworkCredential(strProxys[1], strProxys[2]);
request.Proxy = proxy;
}
break;
case "contenttype":
request.ContentType = item.Value;
break;
default:
request.Headers.Add(item.Key, item.Value);
break;
}
}
}
}
/// <summary>
/// 设置POST请求对象
/// </summary>
/// <param name="parm">请求参数</param>
/// <param name="dicHeaders">请求集合</param>
/// <param name="reqencoding">编码格式</param>
/// <returns>请求对象</returns>
public static HttpWebResponse GetResponse(string url, string parm, int time, string requestencode, string strCookie, Dictionary<string, string> dicHeaders, string path, string Method)
{
System.Net.ServicePointManager.DefaultConnectionLimit = 512;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ServicePoint.Expect100Continue = false;
Encoding reqencoding = string.IsNullOrEmpty(requestencode) ? Encoding.UTF8 : Encoding.GetEncoding(requestencode);
if (time > 0)
request.Timeout = time;
if (!string.IsNullOrEmpty(strCookie))
request.Headers.Add(strCookie);
if (dicHeaders != null && dicHeaders.ContainsKey("ProxyIP") && dicHeaders.ContainsKey("ProxyAct") && dicHeaders.ContainsKey("ProxyPwd"))
{
WebProxy proxy = new WebProxy(dicHeaders["ProxyIP"]);
proxy.Credentials = new NetworkCredential(dicHeaders["ProxyAct"], dicHeaders["ProxyPwd"]);
request.Proxy = proxy;
dicHeaders.Remove("ProxyIP");
dicHeaders.Remove("ProxyAct");
dicHeaders.Remove("ProxyPwd");
}
SetRequest(request, dicHeaders);
if (!string.IsNullOrEmpty(path))
{
//设置证书
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;
string strPath = HttpContext.Current.Server.MapPath(path);
request.ClientCertificates.Add(new X509Certificate(strPath));
}
switch (Method)
{
case "GET":
request.Method = "GET";
break;
case "POST":
request.Method = "POST";
if (dicHeaders != null && (dicHeaders.ContainsKey("ContentType") || dicHeaders.ContainsKey("Content-Type")))
{
}
else
request.ContentType = "application/x-www-form-urlencoded";
if (!string.IsNullOrEmpty(parm))
{
byte[] b = reqencoding.GetBytes(parm);
request.ContentLength = b.Length;
Stream outStream = request.GetRequestStream();
outStream.Write(b, 0, b.Length);
outStream.Close();
}
break;
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return response;
}
/// <summary>
/// 获取返回结果
/// </summary>
/// <param name="ReturnValue">返回结果</param>
/// <param name="repencoding">编码格式</param>
/// <param name="response">HttpWebResponse</param>
/// <returns>获取返回结果</returns>
public static string GetReturnValue(string responseencode, HttpWebResponse response)
{
string ReturnValue = string.Empty;
try
{
Encoding repencoding = string.IsNullOrEmpty(responseencode) ? Encoding.UTF8 : Encoding.GetEncoding(responseencode);
Stream resStream = response.GetResponseStream();
StreamReader SR = new StreamReader(resStream, repencoding);
ReturnValue = SR.ReadToEnd();
resStream.Close();
}
catch (WebException ex)
{
ReturnValue = "Error:" + ex.Message;
}
return ReturnValue;
}
/// <summary>
/// 获取返回结果图片字节组
/// </summary>
/// <param name="responseencode">编码格式</param>
/// <param name="response">HttpWebResponse</param>
/// <returns>获取返回结果图片字节组</returns>
public static byte[] GetReturnBtyes(string responseencode, HttpWebResponse response)
{
byte[] bytes = null;
try
{
Encoding repencoding = string.IsNullOrEmpty(responseencode) ? Encoding.UTF8 : Encoding.GetEncoding(responseencode);
using (Stream resStream = response.GetResponseStream())
{
Bitmap sourcebm = new Bitmap(resStream);
MemoryStream ms = new MemoryStream();
sourcebm.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
bytes = ms.GetBuffer();
}
}
catch (WebException)
{
bytes = null;
}
return bytes;
}
#endregion
#region GET远程访问
#region 返回字符串
#region 重载方法
/// <summary>
/// 通过GET方式读取远程文档
/// 默认:返回UTF-8格式
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestGetData(string url)
{
return RequestGetData(url, 0, "", "", null);
}
/// <summary>
/// 通过GET方式读取远程文档
/// 默认:返回UTF-8格式
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestGetData(string url, int time)
{
return RequestGetData(url, time, "", "", null);
}
/// <summary>
/// 通过GET方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="responseencode">输出编码格式(空默认Encoding.UTF8))</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestGetData(string url, int time, string responseencode)
{
return RequestGetData(url, time, responseencode, "", null);
}
/// <summary>
/// 通过GET方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="responseencode">输出编码格式(为空为Encoding.UTF8))</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestGetData(string url, int time, string responseencode, string strCookie)
{
return RequestGetData(url, time, responseencode, strCookie, null);
}
#endregion
/// <summary>
/// 通过GET方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="responseencode">输出编码格式(为空为Encoding.UTF8))</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <param name="dicHeaders">参数键值对</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestGetData(string url, int time, string responseencode, string strCookie, Dictionary<string, string> dicHeaders)
{
string ReturnValue = "";
try
{
HttpWebResponse response = GetResponse(url, "", time, "", strCookie, dicHeaders, "", "GET");
ReturnValue = GetReturnValue(responseencode, response);
response.Close();
}
catch (WebException ex)
{
ReturnValue = "Error:" + ex.Message;
}
return ReturnValue;
}
#endregion
#region 返回HttpWebResponse
#region 重载方法
/// <summary>
/// 通过GET方式读取远程文档
/// 默认:返回UTF-8格式
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponseGetData(string url, ref string error)
{
return ResponseGetData(url, 0, "", null, ref error);
}
/// <summary>
/// 通过GET方式读取远程文档
/// 默认:返回UTF-8格式
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponseGetData(string url, int time, ref string error)
{
return ResponseGetData(url, time, "", null, ref error);
}
/// <summary>
/// 通过GET方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponseGetData(string url, int time, string strCookie, ref string error)
{
return ResponseGetData(url, time, strCookie, null, ref error);
}
#endregion
/// <summary>
/// 通过GET方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <param name="dicHeaders">参数键值对</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponseGetData(string url, int time, string strCookie, Dictionary<string, string> dicHeaders, ref string error)
{
HttpWebResponse response = null;
try
{
response = GetResponse(url, "", time, "", strCookie, dicHeaders, "", "GET");
}
catch (WebException ex)
{
error = "Error:" + ex.Message;
}
return response;
}
#endregion
#endregion
#region POST远程访问
#region 返回字符串
#region 重载方法
/// <summary>
/// 通过GET方式读取远程文档
/// 默认:返回UTF-8格式;没有超时时间
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestPostData(string url, string parm)
{
return RequestPostData(url, parm, 0, "", "", "", null);
}
/// <summary>
/// 通过POST方式读取远程文档
/// 默认:返回UTF-8格式
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestPostData(string url, string parm, int time)
{
return RequestPostData(url, parm, time, "", "", "", null);
}
/// <summary>
/// 通过POST方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间(0表示无超时时间))</param>
/// <param name="requestencode">输入编码格式(为空为Encoding.UTF8))</param>
/// <param name="responseencode">输出编码格式(空默认Encoding.UTF8))</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestPostData(string url, string parm, int time, string requestencode, string responseencode)
{
return RequestPostData(url, parm, time, requestencode, responseencode, "", null);
}
/// <summary>
/// 通过POST方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="requestencode">输入编码格式(为空为Encoding.UTF8))</param>
/// <param name="responseencode">输出编码格式(为空为Encoding.UTF8))</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestPostData(string url, string parm, int time, string requestencode, string responseencode, string strCookie)
{
return RequestPostData(url, parm, time, requestencode, responseencode, strCookie, null);
}
#endregion
/// <summary>
/// 通过POST方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间</param>
/// <param name="requestencode">输入编码格式(为空为Encoding.UTF8))</param>
/// <param name="responseencode">输出编码格式(为空为Encoding.UTF8))</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <param name="dicHeaders">参数键值对</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestPostData(string url, string parm, int time, string requestencode, string responseencode, string strCookie, Dictionary<string, string> dicHeaders)
{
string ReturnValue = "";
try
{
HttpWebResponse response = GetResponse(url, parm, time, requestencode, strCookie, dicHeaders, "", "POST");
ReturnValue = GetReturnValue(responseencode, response);
response.Close();
}
catch (Exception ex)
{
ReturnValue = "Error:" + ex.Message;
}
return ReturnValue;
}
#endregion
#region 返回HttpWebResponse
#region 重载方法
/// <summary>
/// 通过POST方式读取远程文档
/// 默认:返回UTF-8格式
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponsePostData(string url, string parm, ref string error)
{
return ResponsePostData(url, parm, 0, "", "", null, ref error);
}
/// <summary>
/// 通过POST方式读取远程文档
/// 默认:返回UTF-8格式
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponsePostData(string url, string parm, int time, ref string error)
{
return ResponsePostData(url, parm, time, "", "", null, ref error);
}
/// <summary>
/// 通过POST方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间</param>
/// <param name="requestencode">输入编码格式(为空为Encoding.UTF8))</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponsePostData(string url, string parm, int time, string requestencode, ref string error)
{
return ResponsePostData(url, parm, time, requestencode, "", null, ref error);
}
/// <summary>
/// 通过POST方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="requestencode">输入编码格式(为空为Encoding.UTF8))</param>
/// <param name="responseencode">输出编码格式(为空为Encoding.UTF8))</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponsePostData(string url, string parm, int time, string requestencode, string strCookie, ref string error)
{
return ResponsePostData(url, parm, time, requestencode, strCookie, null, ref error);
}
#endregion
/// <summary>
/// 通过POST方式读取远程文档
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间(0表示无超时时间)</param>
/// <param name="requestencode">输入编码格式(为空为Encoding.UTF8))</param>
/// <param name="responseencode">输出编码格式(为空为Encoding.UTF8))</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <param name="dicHeaders">参数键值对</param>
/// <param name="Error">错误信息</param>
/// <returns>HttpWebResponse</returns>
public static HttpWebResponse ResponsePostData(string url, string parm, int time, string requestencode, string strCookie, Dictionary<string, string> dicHeaders, ref string Error)
{
HttpWebResponse response = null;
try
{
response = GetResponse(url, parm, time, requestencode, strCookie, dicHeaders, "", "POST");
}
catch (Exception ex)
{
Error = "Error:" + ex.Message;
}
return response;
}
#endregion
#endregion
#region 带证书远程访问
/// <summary>
/// 带证书远程访问
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">POST提交的参数</param>
/// <param name="time">访问超时时间</param>
/// <param name="path">证书地址(格式:"~/ConfigFile/Share.cer")</param>
/// <param name="requestencode">输入编码格式(为空为Encoding.UTF8))</param>
/// <param name="responseencode">输出编码格式(为空为Encoding.UTF8))</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <param name="dicHeaders">参数键值对</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string RequestPostCertificateData(string url, string parm, int time, string requestencode, string responseencode, string strCookie, string path, Dictionary<string, string> dicHeaders)
{
string ReturnValue = "";
try
{
HttpWebResponse response = GetResponse(url, parm, time, requestencode, strCookie, dicHeaders, path, "POST");
ReturnValue = GetReturnValue(responseencode, response);
response.Close();
}
catch (WebException ex)
{
ReturnValue = "Error:" + ex.Message;
}
return ReturnValue;
}
/// <summary>
/// 带证书远程访问
/// </summary>
/// <param name="url">远程地址字符串</param>
/// <param name="parm">为空:GET 不为空:POST提交的参数</param>
/// <param name="time">访问超时时间</param>
/// <param name="path">证书地址(格式:"~/ConfigFile/Share.cer")</param>
/// <param name="requestencode">输入编码格式(为空为Encoding.UTF8))</param>
/// <param name="responseencode">输出编码格式(为空为Encoding.UTF8))</param>
/// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>
/// <param name="dicHeaders">参数键值对</param>
/// <param name="Error">错误信息</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static HttpWebResponse RequestPostCertificateData(string url, string parm, int time, string requestencode, string responseencode, string strCookie, string path, Dictionary<string, string> dicHeaders, ref string Error)
{
HttpWebResponse response = null;
try
{
response = GetResponse(url, parm, time, requestencode, strCookie, dicHeaders, path, "POST");
}
catch (WebException ex)
{
Error = "Error:" + ex.Message;
}
return response;
}
/// <summary>
/// 验证服务器证书
/// </summary>
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
#endregion
#region 上传文件远程访问
/// <summary>
/// 将本地文件上传到指定的服务器(HttpWebRequest方法)
/// </summary>
/// <param name="url">文件上传到的服务器地址</param>
/// <param name="time">访问超时时间</param>
/// <param name="fileNamePath">要上传的本地文件(全路径)</param>
/// <param name="saveName">文件上传后的名称</param>
/// <param name="bufferLength">每次上传大小</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
private string UploadFile(string url, int time, string fileNamePath, string saveName, int bufferLength)
{
string ReturnValue = "";
FileStream fs = null;
BinaryReader r = null;
try
{
fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
r = new BinaryReader(fs);//时间戳
string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n"); //请求头部信息
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append("file");
sb.Append("\"; filename=\"");
sb.Append(saveName);
sb.Append("\";");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append("application/octet-stream");
sb.Append("\r\n");
sb.Append("\r\n");
string strPostHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);// 根据uri创建HttpWebRequest对象
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(url);
httpReq.Method = "POST";//对发送的数据不使用缓存
httpReq.AllowWriteStreamBuffering = false;
httpReq.Timeout = time;//设置获得响应的超时时间
httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;
long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length;
long fileLength = fs.Length;
httpReq.ContentLength = length;
byte[] buffer = new byte[bufferLength]; //已上传的字节数
long offset = 0;//开始上传时间
DateTime startTime = DateTime.Now;
int size = r.Read(buffer, 0, bufferLength);
Stream postStream = httpReq.GetRequestStream();//发送请求头部消息
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
while (size > 0)
{
postStream.Write(buffer, 0, size);
offset += size;
TimeSpan span = DateTime.Now - startTime;
double second = span.TotalSeconds;
size = r.Read(buffer, 0, bufferLength);
}
//添加尾部的时间戳
postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
postStream.Close();
WebResponse webRespon = httpReq.GetResponse();
Stream s = webRespon.GetResponseStream();
StreamReader sr = new StreamReader(s);
String sReturnString = sr.ReadLine();
s.Close();
sr.Close();
}
catch (WebException ex)
{
ReturnValue = "Error:" + ex.Message;
}
finally
{
fs.Close();
r.Close();
} return ReturnValue;
}
/// <summary>
/// 带参数上传文件远程访问
/// </summary>
/// <param name="url">地址</param>
/// <param name="file">文件</param>
/// <param name="paramName">文件名</param>
/// <param name="suffix">后缀名(jpg)</param>
/// <param name="contentType">文件类型(images/jpeg)</param>
/// <param name="dicHeaders">参数键值对</param>
/// <returns>成功:网站返回的结果;失败:Error开头的错误信息</returns>
public static string UploadParamFile(string url, byte[] buffer, string paramName, string suffix, string contentType, Dictionary<string, string> dicHeaders)
{
string result = string.Empty;
WebResponse wresp = null;
HttpWebRequest wr = null;
try
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
wr = (HttpWebRequest)WebRequest.Create(url);
wr.ContentType = "multipart/form-data; boundary=" + boundary;
wr.Method = "POST";
wr.KeepAlive = true;
wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
Stream rs = wr.GetRequestStream();
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (var item in dicHeaders)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, item.Key, item.Value);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
rs.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
string header = string.Format(headerTemplate, paramName, "flie." + suffix, contentType);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
rs.Write(buffer, 0, buffer.Length);
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
rs.Write(trailer, 0, trailer.Length);
rs.Close();
wresp = wr.GetResponse();
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
result = reader2.ReadToEnd();
}
catch (Exception)
{
if (wresp != null)
{
wresp.Close();
wresp = null;
}
}
finally
{
wr = null;
}
return result;
}
#endregion
#region 处理Cookie
/// <summary>
/// 获取返回Cookie
/// </summary>
/// <param name="ReturnValue">返回结果</param>
/// <param name="repencoding">编码格式</param>
/// <param name="response">HttpWebResponse</param>
/// <returns>获取返回Cookie</returns>
public static string GetResponseCookie(HttpWebResponse response)
{
string strCodeCookie = string.Empty;
try
{
strCodeCookie = response.Headers.Get("set-cookie");
strCodeCookie = GetCookie(strCodeCookie, true);
}
catch (WebException)
{
strCodeCookie = "";
}
return strCodeCookie;
}
/// <summary>
/// 处理Cookie
/// </summary>
/// <param name="CookieStr">请求返回的Cookie</param>
/// <param name="CookieStr">结果前面是否带Cookie</param>
/// <returns>成功:处理后的Cookie</returns>
public static string GetCookie(string CookieStr, bool isCookie)
{
string strRet = string.Empty;
try
{
string[] myArray = CookieStr.Split(',');
if (myArray.Length > 0)
{
strRet = isCookie ? "Cookie: " : "";
foreach (var str in myArray)
{
string[] CookieArray = str.Split(';');
strRet += CookieArray[0].Trim();
strRet += "; ";
}
strRet = strRet.Substring(0, strRet.Length - 2);
}
}
catch (Exception)
{
strRet = "";
}
return strRet;
}
#endregion
#region 删除不可见字符
/// <summary>
/// 删除不可见字符
/// </summary>
/// <param name="str">原始字符</param>
/// <returns>删除后结果</returns>
public static string DeleteUnVisibleChar(string str)
{
string strRet = str;
try
{
if (string.IsNullOrEmpty(str))
strRet = "";
else
{
System.Text.StringBuilder sBuilder = new System.Text.StringBuilder();
for (int i = 0; i < str.Length; i++)
{
int Unicode = str[i];
if (Unicode < 32)
{
if (Unicode == 2 || Unicode == 3 || Unicode == 27 || Unicode == 30 || Unicode == 11 || Unicode == 15 || Unicode == 16)
{
continue;
}
else if (Unicode == 8 || Unicode == 9 || Unicode == 10 || Unicode == 13)
{
sBuilder.Append(str[i].ToString());
}
else
{
continue;
}
}
else
sBuilder.Append(str[i].ToString());
}
strRet = sBuilder.ToString();
}
}
catch (Exception ex)
{
strRet = "Error:" + ex.Message;
}
return strRet;
}
#endregion
}