zoukankan      html  css  js  c++  java
  • C#模拟Http与Https请求框架实例

      1 using System.Text;
      2 using System.Net;
      3 using System.IO;
      4 using System.Text.RegularExpressions;
      5 using System.Security.Cryptography.X509Certificates;
      6 using System.Net.Security;
      7 namespace WebRequestTest
      8 {
      9     /// <summary>
     10     /// 动态类,每个实例使用单独session
     11     /// </summary>
     12     public class HttpHelperNew
     13     {
     14        public CookieContainer cookie = new CookieContainer(); 
     15         /// <summary>
     16         /// post请求返回html
     17         /// </summary>
     18         /// <param name="Url"></param>
     19         /// <param name="postDataStr"></param>
     20         /// <returns></returns>
     21         public string HttpPost(string Url, string postDataStr)
     22         {
     23             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
     24             //request.AllowAutoRedirect = false; //禁止自动重定向
     25             request.Method = "POST";
     26             request.ContentType = "application/x-www-form-urlencoded";
     27             request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
     28             request.CookieContainer = cookie; //cookie信息由CookieContainer自行维护
     29             Stream myRequestStream = request.GetRequestStream();
     30             StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
     31             myStreamWriter.Write(postDataStr);
     32             myStreamWriter.Close();
     33             HttpWebResponse response = null;
     34             try
     35             {
     36                 this.SetCertificatePolicy();
     37                 response = (HttpWebResponse)request.GetResponse();
     38             }
     39             catch (System.Exception ex)
     40             {
     41             }
     42             //获取重定向地址
     43             //string url1 = response.Headers["Location"];
     44             if (response !=null)
     45             {
     46                 Stream myResponseStream = response.GetResponseStream();
     47                 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
     48                 string retString = myStreamReader.ReadToEnd();
     49                 myStreamReader.Close();
     50                 myResponseStream.Close();
     51                 return retString;
     52             }
     53             else
     54             {
     55                 return "error"; //post请求返回为空
     56             }
     57         }
     58         /// <summary>
     59         /// get请求获取返回的html
     60         /// </summary>
     61         /// <param name="Url"></param>
     62         /// <param name="postDataStr"></param>
     63         /// <returns></returns>
     64         public string HttpGet(string Url, string Querydata)
     65         {
     66             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (Querydata == "" ? "" : "?") + Querydata);
     67             request.Method = "GET";
     68             request.ContentType = "text/html;charset=UTF-8";
     69             request.CookieContainer = cookie;
     70             this.SetCertificatePolicy();
     71             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
     72            // response.Cookies = cookie.GetCookies(response.ResponseUri);
     73             Stream myResponseStream = response.GetResponseStream();
     74             StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
     75             string retString = myStreamReader.ReadToEnd();
     76             myStreamReader.Close();
     77             myResponseStream.Close();
     78             return retString;
     79         }
     80         /// <summary>
     81         /// 获得响应中的图像
     82         /// </summary>
     83         /// <param name="url"></param>
     84         /// <returns></returns>
     85         public Stream GetResponseImage(string url)
     86         {
     87             Stream resst = null;
     88             try
     89             {
     90                 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
     91                 req.KeepAlive = true;
     92                 req.Method = "GET";
     93                 req.AllowAutoRedirect = true;
     94                 req.CookieContainer = cookie;
     95                 req.ContentType = "application/x-www-form-urlencoded";
     96                 req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
     97                 req.Timeout = 50000;
     98                 Encoding myEncoding = Encoding.GetEncoding("UTF-8");
     99                 this.SetCertificatePolicy();
    100                 HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    101                 resst = res.GetResponseStream();
    102                 return resst;
    103             }
    104             catch
    105             {
    106                 return null;
    107             }
    108         }
    109         /// <summary>
    110         /// 正则获取匹配的第一个值
    111         /// </summary>
    112         /// <param name="html"></param>
    113         /// <param name="pattern"></param>
    114         /// <returns></returns>
    115         public string getStringByRegex(string html,string pattern)
    116         {
    117             Regex re = new Regex(pattern, RegexOptions.IgnoreCase);
    118             MatchCollection matchs = re.Matches(html);
    119             if (matchs.Count > 0)
    120             {
    121                 return matchs[0].Groups[1].Value;
    122             }
    123             else
    124                 return "";
    125         }
    126         /// <summary>
    127         /// 正则验证返回的response是否正确
    128         /// </summary>
    129         /// <param name="html"></param>
    130         /// <param name="pattern"></param>
    131         /// <returns></returns>
    132         public bool verifyResponseHtml(string html ,string pattern)
    133         {
    134             Regex re = new Regex(pattern);
    135             return re.IsMatch(html);
    136         }
    137         //注册证书验证回调事件,在请求之前注册
    138         private void SetCertificatePolicy()
    139         {
    140             ServicePointManager.ServerCertificateValidationCallback
    141                        += RemoteCertificateValidate;
    142         }
    143         /// <summary>  
    144         /// 远程证书验证,固定返回true 
    145         /// </summary>  
    146         private static bool RemoteCertificateValidate(object sender, X509Certificate cert,
    147             X509Chain chain, SslPolicyErrors error)
    148         {
    149             return true;
    150         }  
    151     }
    152 }
  • 相关阅读:
    UESTC_秋实大哥与家 2015 UESTC Training for Data Structures<Problem E>
    UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>
    UESTC_秋实大哥与快餐店 2015 UESTC Training for Data Structures<Problem C>
    UESTC_秋实大哥与花 2015 UESTC Training for Data Structures<Problem B>
    UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>
    UESTC_魔法少女小蟹 CDOJ 710
    UESTC_棋盘游戏 CDOJ 578
    UVA_Rotation Game<旋转游戏> UVA 1343
    VS2010调试窗口一闪而过解决方法
    VS中检测内存泄漏的方法
  • 原文地址:https://www.cnblogs.com/pocn/p/5651392.html
Copyright © 2011-2022 走看看