zoukankan      html  css  js  c++  java
  • HttpRequestHelp

       1:  using System;
       2:  using System.Collections.Generic;
       3:  using System.Text;
       4:  using System.Net;
       5:  using System.IO;
       6:  using System.Web;
       7:  using System.Text.RegularExpressions;
       8:   
       9:  public class HttpRequestHelp
      10:  {
      11:   
      12:   
      13:      #region  获取登陆的Cookies信息
      14:   
      15:      /// <summary>登录,获取Cookice信息
      16:      /// </summary>
      17:      /// <param name="url">网址</param>
      18:      /// <param name="paramList">参数</param>
      19:      /// <param name="cookieCon">Cookice信息</param>
      20:      /// <returns>返回登陆的页面</returns>
      21:      public static string Login(string url, string paramList, ref CookieContainer cookieCon)
      22:      {
      23:          HttpWebResponse res = null;
      24:          string strResult = "";
      25:          try
      26:          {
      27:              HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
      28:              req.Method = "POST";
      29:              req.ContentType = "application/x-www-form-urlencoded";
      30:              req.AllowAutoRedirect = false;
      31:              cookieCon = new CookieContainer();
      32:              req.CookieContainer = cookieCon;
      33:              StringBuilder UrlEncoded = new StringBuilder();
      34:              Char[] reserved = { '?', '=', '&' };
      35:              byte[] SomeBytes = null;
      36:              if (paramList != null)
      37:              {
      38:                  int i = 0, j;
      39:                  while (i < paramList.Length)
      40:                  {
      41:                      j = paramList.IndexOfAny(reserved, i);
      42:                      if (j == -1)
      43:                      {
      44:                          UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length - i)));
      45:                          break;
      46:                      }
      47:                      UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j - i)));
      48:                      UrlEncoded.Append(paramList.Substring(j, 1));
      49:                      i = j + 1;
      50:                  }
      51:                  SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
      52:                  req.ContentLength = SomeBytes.Length;
      53:                  Stream newStream = req.GetRequestStream();
      54:                  newStream.Write(SomeBytes, 0, SomeBytes.Length);
      55:                  newStream.Close();
      56:              }
      57:              else
      58:              {
      59:                  req.ContentLength = 0;
      60:              }
      61:   
      62:              res = (HttpWebResponse)req.GetResponse();
      63:              string cookieheader = req.CookieContainer.GetCookieHeader(new Uri(url));//cookies头
      64:              Stream ReceiveStream = res.GetResponseStream();
      65:              Encoding encode = System.Text.Encoding.GetEncoding("GBK");
      66:              StreamReader sr = new StreamReader(ReceiveStream, encode);
      67:              Char[] read = new Char[256];
      68:              int count = sr.Read(read, 0, 256);
      69:              while (count > 0)
      70:              {
      71:                  String str = new String(read, 0, count);
      72:                  strResult += str;
      73:                  count = sr.Read(read, 0, 256);
      74:              }
      75:          }
      76:          catch (Exception e)
      77:          {
      78:              strResult = e.ToString();
      79:          }
      80:          finally
      81:          {
      82:              if (res != null)
      83:              {
      84:                  res.Close();
      85:              }
      86:          }
      87:          return strResult;
      88:      }
      89:      /// <summary>
      90:      /// 获取页面HTML
      91:      /// </summary>
      92:      /// <param name="url">网址</param>
      93:      /// <param name="paramList">参数</param>
      94:      /// <param name="cookieCon">Cookice信息</param>
      95:      /// <returns>返回要处理的页面</returns>
      96:      public static string getPage(string url, string paramList, ref CookieContainer cookieCon)
      97:      {
      98:          HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
      99:          //req.Headers["If-None-Match"] = "36d0ed736e88c71:d9f";
     100:          //req.Referer = "http://bbs.dospy.com";
     101:          //  CookieContainer cookieCon =cookieCon;
     102:          req.CookieContainer = cookieCon;
     103:          //req.CookieContainer.SetCookies(new Uri(url), cookieheader);
     104:          HttpWebResponse res = (HttpWebResponse)req.GetResponse();
     105:          StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.Default);
     106:          string strResult = sr.ReadToEnd();
     107:          sr.Close();
     108:          return strResult;
     109:      }
     110:   
     111:      #endregion
     112:   
     113:      #region  HttpWebRequest
     114:   
     115:      private static CookieContainer cookie = new CookieContainer();
     116:      private static string contentType = "application/x-www-form-urlencoded";
     117:      private static string accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*";
     118:      private static string userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
     119:   
     120:      public static string GetHtmlEx(string url)
     121:      {
     122:          HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
     123:          request.UserAgent = userAgent;
     124:          request.ContentType = contentType;
     125:          request.CookieContainer = cookie;
     126:          request.Accept = accept;
     127:          request.Method = "get";
     128:   
     129:          WebResponse response = request.GetResponse();
     130:          Stream responseStream = response.GetResponseStream();
     131:          Encoding encoding = null;
     132:          for (int i = 0; i < response.Headers.Count; i++)
     133:          {
     134:              Match m = Regex.Match(response.Headers[i].ToString(), "(?i)(?<=charset=)[^ ]+");
     135:              if (!m.Success) continue;
     136:              encoding = Encoding.GetEncoding(m.Value);
     137:              break;
     138:          }
     139:          StreamReader reader = new StreamReader(responseStream, encoding);
     140:          String html = reader.ReadToEnd();
     141:          response.Close();
     142:   
     143:          return html;
     144:      }
     145:   
     146:      #endregion
     147:   
     148:      #region  WebClient
     149:      public static string DownloadData(string url)
     150:      {
     151:          System.Net.WebClient wc = new System.Net.WebClient();
     152:          Byte[] pageData = wc.DownloadData(url);
     153:          string s = System.Text.Encoding.Default.GetString(pageData);
     154:          return s;
     155:      }
     156:      #endregion
     157:   
     158:      #region  获取页面信息,有证书时返回True
     159:      /// <summary>
     160:      /// 传入URL返回网页的html代码
     161:      /// </summary>
     162:      /// <param name="Url">URL</param>
     163:      /// <returns></returns>
     164:      public string GetUrltoHtml(string Url)
     165:      {
     166:          StringBuilder content = new StringBuilder();
     167:          try
     168:          {
     169:              // 与指定URL创建HTTP请求
     170:              ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);//验证
     171:   
     172:              HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
     173:              request.KeepAlive = false;
     174:              request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8; .NET4.0C; .NET4.0E)";
     175:              request.Method = "GET";
     176:              request.Accept = "*/*";
     177:   
     178:              //创建证书文件
     179:              System.Security.Cryptography.X509Certificates.X509Certificate objx509 = new System.Security.Cryptography.X509Certificates.X509Certificate(System.Windows.Forms.Application.StartupPath + "\\123.cer");
     180:   
     181:              //添加到请求里
     182:              request.ClientCertificates.Add(objx509);
     183:   
     184:              HttpWebResponse response = (HttpWebResponse)request.GetResponse();
     185:              // 获取对应HTTP请求的响应
     186:              // 获取响应流
     187:              Stream responseStream = response.GetResponseStream();
     188:              // 对接响应流(以"GBK"字符集)
     189:              StreamReader sReader = new StreamReader(responseStream, Encoding.GetEncoding("GBK"));
     190:              // 开始读取数据
     191:              Char[] sReaderBuffer = new Char[256];
     192:              int count = sReader.Read(sReaderBuffer, 0, 256);
     193:              while (count > 0)
     194:              {
     195:                  String tempStr = new String(sReaderBuffer, 0, count);
     196:                  content.Append(tempStr);
     197:                  count = sReader.Read(sReaderBuffer, 0, 256);
     198:              }
     199:              // 读取结束
     200:              sReader.Close();
     201:          }
     202:          catch (Exception)
     203:          {
     204:              content = new StringBuilder("Runtime Error");
     205:          }
     206:   
     207:          return content.ToString();
     208:      }
     209:      //回调验证证书问题
     210:      public bool CheckValidationResult(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors errors)
     211:      {   // 总是接受    
     212:          return true;
     213:      }
     214:   
     215:      #endregion
     216:   
     217:  }
     218:   
     219:  //最近在做数据采集工作,顺便总结一下几种请求方式。呵呵,我自己懒的写字,就给出几个网上比较经典的程序吧。
     220:  public class RequestWeb
     221:  {
     222:      private readonly static int TIMEOUT = 15000;
     223:      private CookieContainer _cookieCon = new CookieContainer();
     224:      private CredentialCache _credentials;
     225:   
     226:      /// <summary>   
     227:      /// 通过url请求数据   
     228:      /// </summary>   
     229:      /// <param name="url">被请求页面的url</param>   
     230:      /// <param name="proxyServer">代理服务器</param>   
     231:      /// <returns>返回页面内容</returns>   
     232:      public string GetPageContent(string url, string proxyServer)
     233:      {
     234:          StringBuilder ret = new StringBuilder("");
     235:          HttpWebResponse rsp = null;
     236:   
     237:          try
     238:          {
     239:              Uri uri = new Uri(url);
     240:              HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
     241:              if (!string.IsNullOrEmpty(proxyServer))
     242:              {
     243:                  req.Proxy = new WebProxy(proxyServer);
     244:              }
     245:              req.CookieContainer = this._cookieCon;
     246:              req.Headers.Add("Accept-Language: zh-cn");
     247:              req.AllowAutoRedirect = true;
     248:              req.Timeout = TIMEOUT;
     249:   
     250:              if (this._credentials != null)
     251:              {
     252:                  req.PreAuthenticate = true;
     253:                  req.Credentials = this._credentials;
     254:              }
     255:              rsp = (HttpWebResponse)req.GetResponse();
     256:   
     257:              Stream rspStream = rsp.GetResponseStream();
     258:              StreamReader sr = new StreamReader(rspStream, System.Text.Encoding.Default);
     259:   
     260:              //获取数据   
     261:              Char[] read = new Char[256];
     262:              int count = sr.Read(read, 0, 256);
     263:              while (count > 0)
     264:              {
     265:                  ret.Append(read, 0, count);
     266:                  count = sr.Read(read, 0, 256);
     267:              }
     268:          }
     269:          catch (Exception e)
     270:          {
     271:              ret.Append(e.Message);
     272:          }
     273:          finally
     274:          {
     275:              if (rsp != null)
     276:              {
     277:                  rsp.Close();
     278:              }
     279:          }
     280:          return ret.ToString();
     281:      }
     282:   
     283:   
     284:      /// <summary>   
     285:      /// 通过url请求数据(Post方法)   
     286:      /// </summary>   
     287:      /// <param name="url">被请求页面的url</param>   
     288:      /// <param name="param">POST的内容</param>   
     289:      /// <param name="proxyServer">代理</param>   
     290:      /// <returns>返回页面内容</returns>   
     291:      public string GetPageContent(string url, string param, string proxyServer)
     292:      {
     293:          StringBuilder ret = new StringBuilder("");
     294:          HttpWebResponse rsp = null;
     295:   
     296:          try
     297:          {
     298:              Uri uri = new Uri(url);
     299:              HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
     300:              if (!string.IsNullOrEmpty(proxyServer))
     301:              {
     302:                  req.Proxy = new WebProxy(proxyServer);
     303:              }
     304:              req.Method = "POST";
     305:              req.ContentType = "application/x-www-form-urlencoded";
     306:              req.Headers.Add("Accept-Language: zh-cn");
     307:              req.CookieContainer = _cookieCon;
     308:              req.Timeout = TIMEOUT;
     309:              req.AllowAutoRedirect = true;
     310:              if (_credentials != null)
     311:              {
     312:                  req.PreAuthenticate = true;
     313:                  req.Credentials = _credentials;
     314:              }
     315:   
     316:              //传入POST参数的分析   
     317:              if (param != null)
     318:              {
     319:                  string temp = EncodeParams(param, System.Text.Encoding.Default);
     320:                  byte[] bytes = Encoding.UTF8.GetBytes(temp);
     321:                  req.ContentLength = bytes.Length;
     322:                  Stream rspStream = req.GetRequestStream();
     323:                  rspStream.Write(bytes, 0, bytes.Length);
     324:                  rspStream.Close();
     325:              }
     326:              else
     327:              {
     328:                  req.ContentLength = 0;
     329:              }
     330:   
     331:              //取得请求后返回的的数据   
     332:              rsp = (HttpWebResponse)(req.GetResponse());
     333:              Stream ReceiveStream = rsp.GetResponseStream();
     334:              StreamReader sr = new StreamReader(ReceiveStream, System.Text.Encoding.Default);
     335:   
     336:              Char[] read = new Char[256];
     337:              int count = sr.Read(read, 0, 256);
     338:              while (count > 0)
     339:              {
     340:                  ret.Append(read, 0, count);
     341:                  count = sr.Read(read, 0, 256);
     342:              }
     343:          }
     344:          //catch (Exception e)   
     345:          //{   
     346:          //    string err = e.ToString();   
     347:          //}   
     348:          finally
     349:          {
     350:              if (rsp != null)
     351:              {
     352:                  rsp.Close();
     353:              }
     354:          }
     355:          return ret.ToString();
     356:      }
     357:   
     358:      /// <summary>   
     359:      /// 通过传入的url请求文件数据   
     360:      /// </summary>   
     361:      /// <param name="url">图片的URL</param>   
     362:      /// <param name="ProxyServer">代理服务器</param>   
     363:      /// <returns>图片内容</returns>   
     364:      public byte[] GetFile(string url, string proxyServer)
     365:      {
     366:          WebResponse rsp = null;
     367:          byte[] retBytes = null;
     368:   
     369:          try
     370:          {
     371:              Uri uri = new Uri(url);
     372:              WebRequest req = WebRequest.Create(uri);
     373:   
     374:              rsp = req.GetResponse();
     375:              Stream stream = rsp.GetResponseStream();
     376:   
     377:              if (!string.IsNullOrEmpty(proxyServer))
     378:              {
     379:                  req.Proxy = new WebProxy(proxyServer);
     380:              }
     381:   
     382:              using (MemoryStream ms = new MemoryStream())
     383:              {
     384:                  int b;
     385:                  while ((b = stream.ReadByte()) != -1)
     386:                  {
     387:                      ms.WriteByte((byte)b);
     388:                  }
     389:                  retBytes = ms.ToArray();
     390:              }
     391:          }
     392:          catch (Exception ex)
     393:          {
     394:              retBytes = null;
     395:          }
     396:          finally
     397:          {
     398:              if (rsp != null)
     399:              {
     400:                  rsp.Close();
     401:              }
     402:          }
     403:          return retBytes;
     404:      }
     405:   
     406:      private string EncodeParams(string param, Encoding enc)
     407:      {
     408:          StringBuilder ret = new StringBuilder();
     409:          char[] reserved = { '?', '=', '&', '%', '+' };
     410:   
     411:          if (param != null)
     412:          {
     413:              int i = 0, j;
     414:              while (i < param.Length)
     415:              {
     416:                  j = param.IndexOfAny(reserved, i);
     417:                  if (j == -1)
     418:                  {
     419:                      ret.Append(HttpUtility.UrlEncode(param.Substring(i, param.Length - i), enc));
     420:                      break;
     421:                  }
     422:                  ret.Append(HttpUtility.UrlEncode(param.Substring(i, j - i), enc));
     423:                  ret.Append(param.Substring(j, 1));
     424:                  i = j + 1;
     425:              }
     426:          }
     427:          return ret.ToString();
     428:      }
     429:  }
  • 相关阅读:
    Poj2104-K-th Number(主席树)
    Poj3237-Tree(树链剖分)
    Spoj QTREE(树链剖分)
    字符串算法
    网络流算法
    利用DiDiSoft OpenPGP Library for .NET 程序加密解密文件
    利用GPG4Win加密解密文件
    .NET Standard和.NET Framework的区别【转】
    Aras学习笔记 (6) Aras Client Side代码弹出标准ItemType内容窗口
    WebClient使用DownloadFile下载文件超时的解决办法
  • 原文地址:https://www.cnblogs.com/hdl217/p/2034048.html
Copyright © 2011-2022 走看看