栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

HttpHelper类的调用方法详解

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HttpHelper类的调用方法详解

本文实例为大家分享了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(List 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("");
  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 taskInfoEndIndex = strMsg.IndexOf("", i);
      if (taskInfoEndIndex > 0)//必须有任务结束节点
      {
 i = taskInfoEndIndex + "".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 = "" + 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
      {
 
      }
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/123335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号