科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道HttpRequest获取网站信息的程序示例

HttpRequest获取网站信息的程序示例

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

问题:有的网站的相关内容必须要在登录后才可以查看,其登录信息保存在session变量之中。这样,使用asphttp等组件就难以正确得到所要的信息。

作者:中国IT实验室 来源:中国IT实验室 2007年9月5日

关键字: 网站信息 HttpRequest

  • 评论
  • 分享微博
  • 分享邮件
 问题:有的网站的相关内容必须要在登录后才可以查看,其登录信息保存在session变量之中。这样,使用asphttp等组件就难以正确得到所要的信息。 
   
  解决:使用asp.net中的httprequest和httpresponse来实现。 
   
  要点:
  
  1。 通过附加一个cookiecontainer到httprequest对象中,可以得到登录后返回的代表SESSION ID的COOKIE。 见Login方法
  
  2。 将此COOKIE包含在一个cookiecontainer中并附加到另一个HTTPREQUEST请求中,则可以实现SESSION的还原。见getPage方法 
   
  源程序如下:
  
  getHttpInfo.aspx:
  <%@ Page language="c#" Codebehind="getHttpInfo.aspx.cs" AutoEventWireup="false" Inherits="PdfTest.getHttpInfo" %>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <HTML>
  <HEAD>
  <title>WebForm1</title>
  <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
  <meta content="C#" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  </HEAD>
  <body>
  <form id="Form1" method="post" runat="server">
  </form>
  </body>
  </HTML>
  
  
  getHttpInfo.aspx.cs:
  using System;
  using System.Collections;
  using System.ComponentModel;
  using System.Data;
  //using System.Data.OleDb;
  using System.Drawing;
  using System.Web;
  using System.Web.SessionState;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.HtmlControls;
  using System.Net;
  using System.IO;
  using System.Text;
  using System.Text.RegularExpressions;
  using Microsoft.Data.Odbc;
  
  namespace PdfTest
  {
  /// <summary>
  /// Summary description for WebForm1.
  /// </summary>
  public class getHttpInfo : System.Web.UI.Page
  {
  protected static string cookieheader;
  
  
  private void Page_Load(object sender, System.EventArgs e)
  {
  // Put user code to initialize the page here
  
  string strResult;
  
  if (HttpContext.Current.Application["cookieheader"] != null)
  {
  cookieheader = (string)HttpContext.Current.Application["cookieheader"];
  }
  else
  {
  //Login into the website and keep the cookie for the session in the application variable
  string strLogin = Login("http://www.thesiteyouwanttovisit/theloginpage.asp", "Action=&USERID=&Password=") ;
  }
  
  
  strResult = getPage("http://www.thesiteyouwanttovisit/theloginpage.asp", "Action=&data=") ;
  
  
  //Write the result to htm file
  FileStream htmFile = new FileStream("c:\save.htm", FileMode.OpenOrCreate);
  StreamWriter sw = new StreamWriter(htmFile);
  sw.Write(strResult);
  sw.Close();
  htmFile.Close();
  
  // output the result
  Response.Write(strResult);
  }
  
  
  public static string Login(String url, String paramList)
  {
  HttpWebResponse res = null;
  string strResult="";
  
  try
  {
  
  HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  req.Method = "POST";
  req.ContentType = "application/x-www-form-urlencoded";
  req.AllowAutoRedirect = false;
  CookieContainer cookieCon = new CookieContainer();
  req.CookieContainer = cookieCon;
  
  StringBuilder UrlEncoded = new StringBuilder();
  Char[] reserved = {'?', '=', '&'};
  byte[] SomeBytes = null;
  
  if (paramList != null)
  {
  int i=0, j;
  while(i<paramList.Length)
  {
  j=paramList.IndexOfAny(reserved, i);
  if (j==-1)
  {
  UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length-i)));
  break;
  }
  UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i)));
  UrlEncoded.Append(paramList.Substring(j,1));
  i = j+1;
  }
  SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
  req.ContentLength = SomeBytes.Length;
  Stream newStream = req.GetRequestStream();
  newStream.Write(SomeBytes, 0, SomeBytes.Length);
  newStream.Close();
  }
  else
  {
  req.ContentLength = 0;
  }
  
  
  res = (HttpWebResponse)req.GetResponse();
  cookieheader = req.CookieContainer.GetCookieHeader(new Uri(url));
  HttpContext.Current.Application.Lock();
  HttpContext.Current.Application["cookieheader"] = cookieheader;
  HttpContext.Current.Application.UnLock();
  
  Stream ReceiveStream = res.GetResponseStream();
  Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
  StreamReader sr = new StreamReader( ReceiveStream, encode );
  Char[] read = new Char[256];
  int count = sr.Read( read, 0, 256 );
  while (count > 0)
  {
  String str = new String(read, 0, count);
  strResult += str;
  count = sr.Read(read, 0, 256);
  }
  }
  catch(Exception e)
  {
  strResult = e.ToString();
  }
  finally
  {
  if ( res != null )
  {
  res.Close();
  }
  }
  
  return strResult;
  }
  
  
  public static string getPage(String url, String paramList)
  {
  HttpWebResponse res = null;
  string strResult = "";
  
  try
  {
  
  HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  req.Method = "POST";
  req.KeepAlive = true;
  req.ContentType = "application/x-www-form-urlencoded";
  CookieContainer cookieCon = new CookieContainer();
  req.CookieContainer = cookieCon;
  req.CookieContainer.SetCookies(new Uri(url),cookieheader);
  StringBuilder UrlEncoded = new StringBuilder();
  Char[] reserved = {'?', '=', '&'};
  byte[] SomeBytes = null;
  
  if (paramList != null)
  {
  int i=0, j;
  while(i<paramList.Length)
  {
  j=paramList.IndexOfAny(reserved, i);
  if (j==-1)
  {
  UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length-i)));
  break;
  }
  UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i)));
  UrlEncoded.Append(paramList.Substring(j,1));
  i = j+1;
  }
  SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
  req.ContentLength = SomeBytes.Length;
  Stream newStream = req.GetRequestStream();
  newStream.Write(SomeBytes, 0, SomeBytes.Length);
  newStream.Close();
  }
  else
  {
  req.ContentLength = 0;
  }
  
  
  res = (HttpWebResponse)req.GetResponse();
  Stream ReceiveStream = res.GetResponseStream();
  Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
  StreamReader sr = new StreamReader( ReceiveStream, encode );
  Char[] read = new Char[256];
  int count = sr.Read( read, 0, 256 );
  while (count > 0)
  {
  String str = new String(read, 0, count);
  strResult += str;
  count = sr.Read(read, 0, 256);
  }
  }
  catch(Exception e)
  {
  strResult = e.ToString();
  }
  finally
  {
  if ( res != null )
  {
  res.Close();
  }
  }
  
  return strResult;
  }
  
  
  #region Web Form Designer generated code
  override protected void OnInit(EventArgs e)
  {
  //
  // CODEGEN: This call is required by the ASP.NET Web Form Designer.
  //
  InitializeComponent();
  base.OnInit(e);
  }
  
  /// <summary>
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {
  this.Load += new System.EventHandler(this.Page_Load);
  
  }
  #endregion
  
  
  
  }
  }

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
        邮件订阅

        如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

        重磅专题
        往期文章
        最新文章