本文实例为大家分享了HttpHelper类的方法使用,供大家参考,具体内容如下
首先列出HttpHelper类
////// Http操作类 /// public class HttpHelper { private static log4net.ILog mLog = log4net.LogManager.GetLogger("HttpHelper"); [Dllimport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetSetcookie(string lpszUrlName, string lbszcookieName, string lpszcookieData); [Dllimport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetGetcookie(string lpszUrlName, string lbszcookieName, StringBuilder lpszcookieData, ref int lpdwSize); public static StreamReader mLastResponseStream = null; public static System.IO.StreamReader LastResponseStream { get { return mLastResponseStream; } } private static cookieContainer mcookie = null; public static cookieContainer cookie { get { return mcookie; } set { mcookie = value; } } private static cookieContainer mLastcookie = null; public static HttpWebRequest CreateWebRequest(string url, HttpRequestType httpType, string contentType, string data, Encoding requestEncoding, int timeout, bool keepAlive) { if (String.IsNullOrWhiteSpace(url)) { throw new Exception("URL为空"); } HttpWebRequest webRequest = null; Stream requestStream = null; byte[] datas = null; switch (httpType) { case HttpRequestType.GET: case HttpRequestType.DELETE: if (!String.IsNullOrWhiteSpace(data)) { if (!url.Contains('?')) { url += "?" + data; } else url += "&" + data; } if(url.StartsWith("https:")) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; ServicePointManager.ServerCertificatevalidationCallback = new System.Net.Security.RemoteCertificatevalidationCallback(CheckValidationResult); } webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Method = Enum.GetName(typeof(HttpRequestType), httpType); if (contentType != null) { webRequest.ContentType = contentType; } if (mcookie == null) { webRequest.cookieContainer = new cookieContainer(); } else { webRequest.cookieContainer = mcookie; } if (keepAlive) { webRequest.KeepAlive = keepAlive; webRequest.ReadWriteTimeout = timeout; webRequest.Timeout = 60000; mLog.Info("请求超时时间..." + timeout); } break; default: if (url.StartsWith("https:")) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; ServicePointManager.ServerCertificatevalidationCallback = new System.Net.Security.RemoteCertificatevalidationCallback(CheckValidationResult); } webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Method = Enum.GetName(typeof(HttpRequestType), httpType); if (contentType != null) { webRequest.ContentType = contentType; } if (mcookie == null) { webRequest.cookieContainer = new cookieContainer(); } else { webRequest.cookieContainer = mcookie; } if (keepAlive) { webRequest.KeepAlive = keepAlive; webRequest.ReadWriteTimeout = timeout; webRequest.Timeout = 60000; mLog.Info("请求超时时间..." + timeout); } if (!String.IsNullOrWhiteSpace(data)) { datas = requestEncoding.GetBytes(data); } if (datas != null) { webRequest.ContentLength = datas.Length; requestStream = webRequest.GetRequestStream(); requestStream.Write(datas, 0, datas.Length); requestStream.Flush(); requestStream.Close(); } break; } //mLog.InfoFormat("请求 Url:{0},HttpRequestType:{1},contentType:{2},data:{3}", url, Enum.GetName(typeof(HttpRequestType), httpType), contentType, data); return webRequest; } public static cookieContainer GetLastcookie() { return mLastcookie; } ////// 设置HTTP的cookie,以后发送和请求用此cookie /// /// cookieContainer public static void SetHttpcookie(cookieContainer cookie) { mcookie = cookie; } private static HttpWebRequest mLastAsyncRequest = null; public static HttpWebRequest LastAsyncRequest { get { return mLastAsyncRequest; } set { mLastAsyncRequest = value; } } ////// 发送请求 /// /// 请求Url /// 请求类型 /// contentType:application/x-www-form-urlencoded /// 请求数据 /// 请求数据传输时编码格式 ///返回请求结果 public static string SendRequest(string url, HttpRequestType httpType, string contentType, string data, Encoding requestEncoding, Encoding reponseEncoding, params AsyncCallback[] callBack) { int timeout = 0; bool keepAlive = false; if (callBack != null && callBack.Length > 0 && callBack[0] != null) { keepAlive = true; timeout = 1000*60*60; mLog.Info("写入读取超时时间..." + timeout); } // mLog.Info("开始创建请求...."); HttpWebRequest webRequest = CreateWebRequest(url, httpType, contentType, data, requestEncoding,timeout,keepAlive); string ret = null; // mLog.Info("创建请求结束...."); if (callBack != null && callBack.Length > 0 && callBack[0] != null) { // mLog.Info("开始异步请求...."); mLastAsyncRequest = webRequest; webRequest.BeginGetResponse(callBack[0], webRequest); } else { // mLog.Info("开始同步请求...."); StreamReader sr = new StreamReader(webRequest.GetResponse().GetResponseStream(), reponseEncoding); ret = sr.ReadToEnd(); sr.Close(); } mLastcookie = webRequest.cookieContainer; //mLog.InfoFormat("结束请求 Url:{0},HttpRequestType:{1},contentType:{2},结果:{3}", url, Enum.GetName(typeof(HttpRequestType), httpType), contentType,ret); return ret; } ////// Http上传文件 /// public static string HttpUploadFile(string url, string path) { using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { // 设置参数 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; cookieContainer cookieContainer = new cookieContainer(); request.cookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.AllowWriteStreamBuffering = false; request.SendChunked = true; request.Method = "POST"; request.Timeout = 300000; string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线 request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary; byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("rn--" + boundary + "rn"); byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("rn--" + boundary + "--rn"); int pos = path.LastIndexOf("\"); string fileName = path.Substring(pos + 1); //请求头部信息 StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name="file";filename="{0}"rnContent-Type:application/octet-streamrnrn", fileName)); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString()); request.ContentLength = itemBoundaryBytes.Length + postHeaderBytes.Length + fs.Length + endBoundaryBytes.Length; using (Stream postStream = request.GetRequestStream()) { postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length); postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); int bytesRead = 0; int arrayLeng = fs.Length <= 4096 ? (int)fs.Length : 4096; byte[] bArr = new byte[arrayLeng]; int counter = 0; while ((bytesRead = fs.Read(bArr, 0, arrayLeng)) != 0) { counter++; postStream.Write(bArr, 0, bytesRead); } postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length); } //发送请求并获取相应回应数据 using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { //直到request.GetResponse()程序才开始向目标网页发送Post请求 using (Stream instream = response.GetResponseStream()) { StreamReader sr = new StreamReader(instream, Encoding.UTF8); //返回结果网页(html)代码 string content = sr.ReadToEnd(); return content; } } } } public static string HttpUploadFile(string url, MemoryStream files, string fileName) { using (MemoryStream fs = files) { // 设置参数 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; cookieContainer cookieContainer = new cookieContainer(); request.cookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.AllowWriteStreamBuffering = false; request.SendChunked = true; request.Method = "POST"; request.Timeout = 300000; string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线 request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary; byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("rn--" + boundary + "rn"); byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("rn--" + boundary + "--rn"); //请求头部信息 StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name="file";filename="{0}"rnContent-Type:application/octet-streamrnrn", fileName)); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString()); request.ContentLength = itemBoundaryBytes.Length + postHeaderBytes.Length + fs.Length + endBoundaryBytes.Length; using (Stream postStream = request.GetRequestStream()) { postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length); postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); int bytesRead = 0; int arrayLeng = fs.Length <= 4096 ? (int)fs.Length : 4096; byte[] bArr = new byte[arrayLeng]; int counter = 0; fs.Position = 0; while ((bytesRead = fs.Read(bArr, 0, arrayLeng)) != 0) { counter++; postStream.Write(bArr, 0, bytesRead); } postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length); } //发送请求并获取相应回应数据 using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { //直到request.GetResponse()程序才开始向目标网页发送Post请求 using (Stream instream = response.GetResponseStream()) { StreamReader sr = new StreamReader(instream, Encoding.UTF8); //返回结果网页(html)代码 string content = sr.ReadToEnd(); return content; } } } } #region public static 方法 ////// 将请求的流转化为字符串 /// /// ///public static string GetStr(Stream info) { string result = ""; try { using (StreamReader sr = new StreamReader(info, System.Text.Encoding.UTF8)) { result = sr.ReadToEnd(); sr.Close(); } } catch { } return result; } /// /// 参数转码 /// /// ///public static string stringDecode(string str) { return HttpUtility.UrlDecode(HttpUtility.UrlDecode(str, System.Text.Encoding.GetEncoding("UTF-8")), System.Text.Encoding.GetEncoding("UTF-8")); } /// /// json反序列化 /// ////// /// public static T Deserialize (string json) { try { T obj = Activator.CreateInstance (); using (MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); return (T)serializer.ReadObject(ms); } } catch { return default(T); } } #endregion public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { // 总是接受 return true; } } public enum HttpRequestType { POST, GET, DELETE, PUT, PATCH, HEAD, TRACE, OPTIONS }
然后列出HttpHelper的调用
1、不带参数调用
public bool ConnectServer()
{
try
{
string url = "https://i.cnblogs.com";
string xml = HttpHelper.SendRequest(url, HttpRequestType.POST, null, null, Encoding.UTF8, Encoding.UTF8);
NormalResponse nr = HuaweiXMLHelper.GetNormalResponse(xml);
if (nr.Code == "0")
{
HttpHelper.SetHttpcookie(HttpHelper.GetLastcookie());
mIsConnect = true;
return true;
}
else
{
mIsConnect = false;
return false;
}
}
catch (System.Exception ex)
{
mIsConnect = false;
return false;
}
}
2.带参数调用
private bool HandleIntelligentTask(string taskId,bool bStop)
{
try
{
if (!mIsConnect)
{
return false;
}
StringBuilder sb = new StringBuilder();
sb.AppendFormat("rn");
sb.AppendFormat("{0} rn", taskId);//
sb.AppendFormat("{0} rn",bStop?0:1);
sb.AppendFormat(" rn");
string xml = sb.ToString();
string url = mIAServerUrl + "/sdk_service/rest/video-analysis/handle-intelligent-analysis";
string xml2 = HttpHelper.SendRequest(url, HttpRequestType.POST, "text/plain;charset=utf-8", xml, Encoding.UTF8, Encoding.UTF8);
NormalResponse nr = HuaweiXMLHelper.GetNormalResponse(xml2);
if (nr.Code == "0")
{
return true;
}
else
{
return false;
}
}
catch (System.Exception ex)
{
return false;
}
}
3.异步调用
private void ReStartAlarmServer(Listlist, string alarmUrl, Thread[] listThread) { StopAlarm(alarmUrl, listThread); listThread[0]= new Thread(new ThreadStart(delegate() { try { if (!mIsConnect) { mLog.Error("未登录!--ReStartAlarmServer-结束!"); return; } mLog.Info("ReStartAlarmServer开始报警连接...."); if (String.IsNullOrWhiteSpace(alarmUrl)) return; mLog.InfoFormat("ReStartAlarmServer请求报警:URL={0}", alarmUrl); string xml = "task-id=0"; string xml2 = HttpHelper.SendRequest(alarmUrl, HttpRequestType.POST, "application/x-www-form-urlencoded", xml, Encoding.UTF8, Encoding.UTF8, AlarmCallBack); mLog.Info("ReStartAlarmServer报警连接成功!"); } catch (System.Threading.ThreadAbortException ex) { mLog.Info("ReStartAlarmServer线程已人为终止!" + ex.Message, ex); } catch (System.Exception ex) { mLog.Error("ReStartAlarmServer开始报警连接失败:" + ex.Message, ex); mLog.Info("ReStartAlarmServer开始重新报警连接...."); mTimes = 50; } finally { } })); listThread[0].IsBackground = true; listThread[0].Start(); } private void AlarmCallBack(IAsyncResult ir) { try { HttpWebRequest webRequest = (HttpWebRequest)ir.AsyncState; string salarmUrl = webRequest.Address.OriginalString; Thread[] alarmThead = dicAlarmUrls[salarmUrl]; HttpWebResponse response = (HttpWebResponse)webRequest.EndGetResponse(ir); Stream stream = response.GetResponseStream(); alarmThead[1]= new Thread(new ThreadStart(delegate() { try { byte[] buffer = new byte[mAlarmReadCount]; int count = 0; string strMsg = ""; int startIndex = -1; int endIndex = -1; NormalResponse res = null; DateTime dtStart = DateTime.Now; DateTime dtEnd = DateTime.Now; while (!mIsCloseAlarm) { count = stream.Read(buffer, 0, mAlarmReadCount); if (count > 0) { strMsg += Encoding.UTF8.GetString(buffer, 0, count); startIndex = strMsg.IndexOf(" "); endIndex = strMsg.IndexOf(" "); string xml = strMsg.Substring(startIndex, endIndex - startIndex + "".Length); res = HuaweiXMLHelper.GetNormalResponse(xml); strMsg = strMsg.Substring(endIndex + "".Length); startIndex = -1; endIndex = -1; break; } dtEnd = DateTime.Now; if ((dtEnd - dtStart).TotalSeconds > 10) { throw new Exception("连接信息未有获取到,需要重启报警!"); } } while (!mIsCloseAlarm) { count = stream.Read(buffer, 0, mAlarmReadCount); if (count > 0) { string temp = Encoding.UTF8.GetString(buffer, 0, count); strMsg += temp; while (strMsg.Length > 0) { if (startIndex == -1)//未发现第一个{ startIndex = strMsg.IndexOf(" "); if (startIndex == -1) { if (strMsg.Length >= " ".Length) { strMsg = strMsg.Substring(strMsg.Length - " ".Length); } break; } } if (startIndex >= 0) { int i = startIndex + " ".Length; int i1 = strMsg.IndexOf("", i);//找到轨迹节点结束 int i2 = strMsg.IndexOf("", i);//找到报警节点结束,发现一条报警 if (i1 == -1 && i2 == -1)//没有标志结束 { break; } else if (i1 >= 0 && (i1 < i2 || i2 == -1))//找到轨迹结束节点 { strMsg = strMsg.Substring(i1 + "".Length); startIndex = -1; endIndex = -1; continue; } else if (i2 > 0 && (i2 < i1 || i1 == -1))//找报警节点 { endIndex = i2;//找到报警节点结束,发现一条报警 string alarmXml = "".Length; int taskInfoEndIndex = strMsg.IndexOf(" ", i); if (taskInfoEndIndex > 0)//必须有任务结束节点 { i = taskInfoEndIndex + "" + strMsg.Substring(startIndex, endIndex - startIndex + "".Length) + " "; Thread th = new Thread(new ThreadStart(delegate() { ParseAlarmXml(alarmXml); })); th.IsBackground = true; th.Start(); strMsg = strMsg.Substring(endIndex + "".Length); startIndex = -1; endIndex = -1; continue; } } else { break; } } } } else { Console.WriteLine("##########读取报警反馈:无"); Thread.Sleep(1000); } } } catch (System.Threading.ThreadAbortException ex) { mLog.Info("AlarmCallBack...7"); try { if (stream != null) { stream.Close(); stream.Dispose(); response.Close(); } } catch { } mLog.Info("AlarmCallBack线程已人为终止!--0" + ex.Message, ex); } catch(IOException ex) { mLog.Info("AlarmCallBack...8"); try { if (stream != null) { stream.Close(); stream.Dispose(); response.Close(); } } catch { } } catch (ObjectDisposedException ex) { mLog.Info("AlarmCallBack...9"); mLog.Info("AlarmCallBack读取流已人为终止!--2" + ex.Message, ex); try { if (stream != null) { stream.Close(); stream.Dispose(); response.Close(); } } catch { } } catch (System.Exception ex) { mLog.Info("AlarmCallBack...10"); mLog.Error("AlarmCallBack 0:" + ex.Message,ex); try { if (stream != null) { stream.Close(); stream.Dispose(); response.Close(); } } catch { } } finally { } })); alarmThead[1].IsBackground = true; alarmThead[1].Start(); } catch (System.Exception ex) { mLog.Info("AlarmCallBack...11"); mLog.Error("AlarmCallBack 1:" + ex.Message,ex); mLog.Info("AlarmCallBack开始重新报警连接....3"); mTimes = 50; } finally { } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



