国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

HttpHelper類的調用方法詳解

2020-01-24 00:35:57
字體:
來源:轉載
供稿:網友

本文實例為大家分享了HttpHelper類的方法使用,供大家參考,具體內容如下

首先列出HttpHelper類

/// <summary> /// Http操作類 /// </summary> 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;  }  /// <summary>  /// 設置HTTP的Cookie,以后發(fā)送和請求用此Cookie  /// </summary>  /// <param name="cookie">CookieContainer</param>  public static void SetHttpCookie(CookieContainer cookie)  {   mCookie = cookie;  }  private static HttpWebRequest mLastAsyncRequest = null;  public static HttpWebRequest LastAsyncRequest  {   get { return mLastAsyncRequest; }   set { mLastAsyncRequest = value; }  }  /// <summary>  /// 發(fā)送請求  /// </summary>  /// <param name="url">請求Url</param>  /// <param name="httpType">請求類型</param>  /// <param name="contentType">contentType:application/x-www-form-urlencoded</param>  /// <param name="data">請求數(shù)據(jù)</param>  /// <param name="encoding">請求數(shù)據(jù)傳輸時編碼格式</param>  /// <returns>返回請求結果</returns>  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("開始創(chuàng)建請求....");   HttpWebRequest webRequest = CreateWebRequest(url, httpType, contentType, data, requestEncoding,timeout,keepAlive);   string ret = null;   // mLog.Info("創(chuàng)建請求結束....");   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;  }  /// <summary>  /// Http上傳文件  /// </summary>  public static string HttpUploadFile(string url, string path)  {   using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))   {    // 設置參數(shù)    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("/r/n--" + boundary + "/r/n");    byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("/r/n--" + boundary + "--/r/n");    int pos = path.LastIndexOf("http://");    string fileName = path.Substring(pos + 1);    //請求頭部信息    StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=/"file/";filename=/"{0}/"/r/nContent-Type:application/octet-stream/r/n/r/n", 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);    }    //發(fā)送請求并獲取相應回應數(shù)據(jù)    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)    {     //直到request.GetResponse()程序才開始向目標網頁發(fā)送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)   {    // 設置參數(shù)    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("/r/n--" + boundary + "/r/n");    byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("/r/n--" + boundary + "--/r/n");    //請求頭部信息    StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=/"file/";filename=/"{0}/"/r/nContent-Type:application/octet-stream/r/n/r/n", 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);    }    //發(fā)送請求并獲取相應回應數(shù)據(jù)    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)    {     //直到request.GetResponse()程序才開始向目標網頁發(fā)送Post請求     using (Stream instream = response.GetResponseStream())     {      StreamReader sr = new StreamReader(instream, Encoding.UTF8);      //返回結果網頁(html)代碼      string content = sr.ReadToEnd();      return content;     }    }   }  }  #region public static 方法  /// <summary>  /// 將請求的流轉化為字符串  /// </summary>  /// <param name="info"></param>  /// <returns></returns>  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;  }  /// <summary>  /// 參數(shù)轉碼  /// </summary>  /// <param name="str"></param>  /// <returns></returns>  public static string stringDecode(string str)  {   return HttpUtility.UrlDecode(HttpUtility.UrlDecode(str, System.Text.Encoding.GetEncoding("UTF-8")), System.Text.Encoding.GetEncoding("UTF-8"));  }  /// <summary>  /// json反序列化  /// </summary>  /// <typeparam name="T"></typeparam>  /// <param name="json"></param>  /// <returns></returns>  public static T Deserialize<T>(string json)  {   try   {    T obj = Activator.CreateInstance<T>();    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、不帶參數(shù)調用

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.帶參數(shù)調用

private bool HandleIntelligentTask(string taskId,bool bStop)    {      try      {        if (!mIsConnect)        {          return false;        }        StringBuilder sb = new StringBuilder();        sb.AppendFormat("<request>/r/n");        sb.AppendFormat("<task_id>{0}</task_id>/r/n", taskId);//<!-- task-id為調用方生成的UUID或其它串 -->        sb.AppendFormat("<status>{0}</status>/r/n",bStop?0:1);        sb.AppendFormat("</request>/r/n");        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(List<string> list, 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("<response>");                endIndex = strMsg.IndexOf("</response>");                string xml = strMsg.Substring(startIndex, endIndex - startIndex + "</response>".Length);                res = HuaweiXMLHelper.GetNormalResponse(xml);                strMsg = strMsg.Substring(endIndex + "</response>".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)//未發(fā)現(xiàn)第一個<task-info>                  {                    startIndex = strMsg.IndexOf("<task-info>");                    if (startIndex == -1)                    {                      if (strMsg.Length >= "<task-info>".Length)                      {                        strMsg = strMsg.Substring(strMsg.Length - "<task-info>".Length);                      }                      break;                    }                  }                  if (startIndex >= 0)                  {                    int i = startIndex + "<task-info>".Length;                    int taskInfoEndIndex = strMsg.IndexOf("</task-info>", i);                    if (taskInfoEndIndex > 0)//必須有任務結束節(jié)點                    {                      i = taskInfoEndIndex + "</task-info>".Length;                      int i1 = strMsg.IndexOf("</attach-rules>", i);//找到軌跡節(jié)點結束                      int i2 = strMsg.IndexOf("</alarm>", i);//找到報警節(jié)點結束,發(fā)現(xiàn)一條報警                      if (i1 == -1 && i2 == -1)//沒有標志結束                      {                        break;                      }                      else if (i1 >= 0 && (i1 < i2 || i2 == -1))//找到軌跡結束節(jié)點                      {                        strMsg = strMsg.Substring(i1 + "</attach-rules>".Length);                        startIndex = -1;                        endIndex = -1;                        continue;                      }                      else if (i2 > 0 && (i2 < i1 || i1 == -1))//找報警節(jié)點                      {                        endIndex = i2;//找到報警節(jié)點結束,發(fā)現(xiàn)一條報警                        string alarmXml = "<taskalarm>" + strMsg.Substring(startIndex, endIndex - startIndex + "</alarm>".Length) + "</taskalarm>";                        Thread th = new Thread(new ThreadStart(delegate()                        {                          ParseAlarmXml(alarmXml);                        }));                        th.IsBackground = true;                        th.Start();                        strMsg = strMsg.Substring(endIndex + "</alarm>".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      {              }    }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临夏县| 广宁县| 铜陵市| 宁阳县| 嘉鱼县| 民乐县| 莱州市| 浦东新区| 剑阁县| 新野县| 原阳县| 阳江市| 宁都县| 屏南县| 衡阳县| 广宗县| 武隆县| 鄂尔多斯市| 荣成市| 包头市| 乐陵市| 合山市| 姚安县| 永寿县| 万盛区| 惠水县| 陵水| 临猗县| 龙井市| 泌阳县| 保定市| 武城县| 贺兰县| 马山县| 莲花县| 阳新县| 红安县| 农安县| 土默特左旗| 台湾省| 凤山县|