zoukankan      html  css  js  c++  java
  • asp.net httprequest httpresponse

    问题:有的网站的相关内容必须要在登录后才可以查看,其登录信息保存在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
      
      
      
      }
      }
    //通过Post发送的数据
       string payload="chkbook=book&keyword=管理";
       WebRequest req = WebRequest.Create("http://localhost/pceo/Search.aspx");
       req.Method = "POST";
       req.ContentType = "application/x-www-form-urlencoded";
       StringBuilder UrlEncoded = new StringBuilder();
       Char[] reserved = {'?', '=', '&'};
       byte[] SomeBytes = null;
       if (payload != null)
       {
       int i=0, j;
       while(i<payload.Length)
       {
       j=payload.IndexOfAny(reserved, i);
       if (j==-1)
       {
       UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, payload.Length-i),System.Text .Encoding .GetEncoding ("gb2312")));
       break;
       }
       UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, j-i),System.Text .Encoding .GetEncoding ("gb2312")));
       UrlEncoded.Append(payload.Substring(j,1));
       i = j+1;
       }
       SomeBytes = Encoding.Default.GetBytes(UrlEncoded.ToString());
       req.ContentLength = SomeBytes.Length;
       Stream newStream = req.GetRequestStream();
       newStream.Write(SomeBytes, 0, SomeBytes.Length);
       newStream.Close();
       }
       else
       {
       req.ContentLength = 0;
       }
       try
       {
       WebResponse result = req.GetResponse();
       Stream ReceiveStream = result.GetResponseStream();
      
       Byte[] read = new Byte[512];
       int bytes = ReceiveStream.Read(read, 0, 512);
      
       txtHTML.InnerHtml = "";
       while (bytes > 0)
       {
      
       // 注意:
       // 下面假定响应使用 UTF-8 作为编码方式。
       // 如果内容以 ANSI 代码页形式(例如,932)发送,则使用类似下面的语句:
       // Encoding encode = System.Text.Encoding.GetEncoding("shift-jis");
       Encoding encode = System.Text.Encoding.GetEncoding("gb2312");
       txtHTML.InnerHtml = txtHTML.InnerHtml + encode.GetString(read, 0, bytes);
       bytes = ReceiveStream.Read(read, 0, 512);
       }
       }
       catch(Exception)
       {
       txtHTML.InnerHtml = "检索页时出错";
       }
    最近有个朋友离开IT行业二年的朋友说要实现用程序向某个网站的页面上传数据,他是意思是每天有几十条数据要在网站页面上填写,很烦,最好用程序来写。网站页面是用POST传递的,同时没有验证码之类的东东,只有一点限制就是5分种内不能填写二次记录。这一切都好办。
      
      using System.Web;
      using System.Net;
      using System.Text;
      using System.IO;
      
      //创建对某个网站页面的请求
      
      HttpWebRequest myRequest = (HttpWebRequest )WebRequest.Create("http://www.knowsky.com/a.asp")
      
      //上传的数据,”TextBox1“这些东东是网站页面里的控件ID,如果要上传多个值也是用&来分隔
      
       string postData="TextBox1="+this.textBox1.Text+"&TextBox2="+this.textBox2.Text+"
      &TextBox3="+this.textBox3.Text+"&TextBox4="+this.textBox4.Text;
       ASCIIEncoding encoding=new ASCIIEncoding();
       byte[] byte1=encoding.GetBytes(postData);//最终编码后要上传的数据
       // Set the content type of the data being posted.
       myRequest.ContentType="application/x-www-form-urlencoded";
       myRequest.Method="post";//post上传方式
       // Set the content length of the string being posted.
       myRequest.ContentLength=postData.Length;
       Stream newStream=myRequest.GetRequestStream();
       newStream.Write(byte1,0,byte1.Length);
      
      
      一切就OK了,如果你想上传后看到网站的内容的话,可以在程序里放一个IE控件,使用
      
      axWebBrowser1.Navigate("http://www.knowsky.com/a.asp");
      axWebBrowser1.Refresh2();
  • 相关阅读:
    自定义时间工具类
    http和https
    客户端是什么意思
    19.在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?)写出http常见的状态码和含义,至少5个.[完善题目]
    20.谈谈对mvc的认识。
    18.有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?
    17.如何修改SESSION的生存时间。
    16.语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
    14.对于大流量的网站,您采用什么样的方法来解决访问量问题?
    15.用PHP写出显示客户端IP与服务器IP的代码,如何防止用户使用代理的情况?[添加更多详情]
  • 原文地址:https://www.cnblogs.com/hq2008/p/1012504.html
Copyright © 2011-2022 走看看