天天看點

C#遠端登陸帶驗證碼的網站

C#遠端登陸帶驗證碼的網站

第一步:添加空間引用

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Net;

using System.IO;

using System.Text;

using System.Diagnostics;

using System.Web;

第二步:按鈕運作代碼

private void button4_Click(object sender, System.EventArgs e)

  {

   this.button4.Enabled=false;

   //第一步:擷取系統登陸驗證碼

   string url="http://localhost:8001/login.asp";

   string indata="";

   string outdata="";

   CookieContainer myCookieContainer=new CookieContainer();

   //建立一個CookieContainer來存放Cookie集合

   HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url);

   //建立一個HttpWebRequest

   myHttpWebRequest.Referer="http://localhost:8001/login.asp";

   myHttpWebRequest.ContentType="application/x-www-form-urlencoded";

   myHttpWebRequest.ContentLength=indata.Length;

   myHttpWebRequest.Method="POST";

   myHttpWebRequest.CookieContainer=myCookieContainer;

   //設定HttpWebRequest的CookieContainer為剛才建立的那個myCookieContainer

   Stream myRequestStream=myHttpWebRequest.GetRequestStream();

   StreamWriter myStreamWriter=new StreamWriter(myRequestStream,Encoding.GetEncoding("gb2312"));                

   myStreamWriter.Write(indata);

   //把資料寫入HttpWebRequest的Request流

   myStreamWriter.Close();

   myRequestStream.Close();

   //關閉打開對象

   HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();

   //建立一個HttpWebResponse

   myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);

   //擷取一個包含url的Cookie集合的CookieCollection

   Stream myResponseStream=myHttpWebResponse.GetResponseStream();

   StreamReader myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312"));

   outdata=myStreamReader.ReadToEnd();

   //把資料從HttpWebResponse的Response流中讀出

   myStreamReader.Close();

   myResponseStream.Close();

   Console.WriteLine("擷取驗證碼"+outdata);

   //第二步:嘗試登陸系統擷取登陸後的Cookie

   string VerifyCode=outdata.Substring(outdata.LastIndexOf("id=/"verifycode/"")+63,4);   

   url="http://localhost:8001/Checklogin.asp";

   indata="UserName=testuser&Password=testpassword&verifycode="+VerifyCode;

   outdata="";

   //建立一個CookieContainer來存放Cookie集合

   myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url);

   //建立一個HttpWebRequest

   myHttpWebRequest.Referer="http://localhost:8001/login.asp";

   myHttpWebRequest.ContentType="application/x-www-form-urlencoded";

   myHttpWebRequest.ContentLength=indata.Length;

   myHttpWebRequest.Method="POST";

   myHttpWebRequest.CookieContainer=myCookieContainer;

   //設定HttpWebRequest的CookieContainer為剛才建立的那個myCookieContainer

   myRequestStream=myHttpWebRequest.GetRequestStream();

   myStreamWriter=new StreamWriter(myRequestStream,Encoding.GetEncoding("gb2312"));                

   myStreamWriter.Write(indata);

   //把資料寫入HttpWebRequest的Request流

   myStreamWriter.Close();

   myRequestStream.Close();

   //關閉打開對象

   myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();

   //建立一個HttpWebResponse

   myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);

   //擷取一個包含url的Cookie集合的CookieCollection

   myResponseStream=myHttpWebResponse.GetResponseStream();

   myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312"));

   outdata=myStreamReader.ReadToEnd();

   //把資料從HttpWebResponse的Response流中讀出

   myStreamReader.Close();

   myResponseStream.Close();

   Console.WriteLine("登陸系統"+outdata);

   //第二步:嘗試需要登陸後才能浏覽的頁面

   //拿到登入後的Cookie,再發送需要登陸的頁面請求就能直接讀取到登入後的内容了

   url="http://localhost:8001/WowPrice.asp";

   myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url);

   myHttpWebRequest.CookieContainer=myCookieContainer;    

   //剛才那個CookieContainer已經存有了Cookie,把它附加到HttpWebRequest中則能直接通過驗證

   myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();

   myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);

   myResponseStream=myHttpWebResponse.GetResponseStream();

   myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312"));

   outdata=myStreamReader.ReadToEnd();

   myStreamReader.Close();

   myResponseStream.Close();

   Console.WriteLine("擷取價格頁面"+outdata);

   this.button4.Enabled=true;

  }

繼續閱讀