C#使用HttpWebRequest與HttpWebResponse模擬用戶(hù)登錄
模擬藝龍旅游網(wǎng)登錄,供大家參考,具體內(nèi)容如下
想模擬登錄,首先整理一下流程
1.通過(guò)360瀏覽器(IE,火狐等等)F12開(kāi)發(fā)人員工具抓到相關(guān)數(shù)據(jù)
2.獲取驗(yàn)證碼(拿到cookie),登錄時(shí)也需要使用
3.登錄
F12調(diào)出開(kāi)發(fā)人員工具,輸入用戶(hù)名,密碼登錄,看我們抓到了什么信息。
Request URL:這個(gè)就是登錄請(qǐng)求的url  
https://secure.elong.com/passport/ajax/elongLogin
方式POST
Form Data:這個(gè)是我們要POST傳輸?shù)臄?shù)據(jù):
userName=xzdylyh&passwd=12313&validateCode=驗(yàn)證碼&rememberMe=false
其它一些重要信息在Request Headers中
*****************************************************************
我使用C# 設(shè)計(jì)的winform界面
復(fù)制代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Net;
using System.IO;
using System.Data;
namespace HTTPHELPER
{
  public class ELOGN_LOGIN
  {
    public static CookieContainer container = null; //存儲(chǔ)驗(yàn)證碼cookie
    #region 登錄
    public string requestM(string uName,string passwd,string vaildate)
    {
      HttpWebRequest request = null;
      HttpWebResponse response = null;
      try
      {
        request = (HttpWebRequest)HttpWebRequest.Create("https://secure.elong.com/passport/ajax/elongLogin");
        request.Method = "Post";
        request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
        request.AllowAutoRedirect = true;
        request.CookieContainer = container;//獲取驗(yàn)證碼時(shí)候獲取到的cookie會(huì)附加在這個(gè)容器里面
        request.KeepAlive = true;//建立持久性連接
        //整數(shù)據(jù)
        string postData = string.Format("userName={0}&passwd={1}&validateCode={2}&rememberMe=true", uName, passwd, vaildate);
        ASCIIEncoding encoding = new ASCIIEncoding();
        byte[] bytepostData = encoding.GetBytes(postData);
        request.ContentLength = bytepostData.Length;
        //發(fā)送數(shù)據(jù) using結(jié)束代碼段釋放
        using (Stream requestStm = request.GetRequestStream())
        {
          requestStm.Write(bytepostData, 0, bytepostData.Length);
        }
        //響應(yīng)
        response = (HttpWebResponse)request.GetResponse();
        string text = string.Empty;
        using (Stream responseStm = response.GetResponseStream())
        {
          StreamReader redStm = new StreamReader(responseStm, Encoding.UTF8);
          text = redStm.ReadToEnd();
        }
        return text;
      }
      catch (Exception ex)
      {
        var msg = ex.Message;
        return msg;
      }
    }
    #endregion
    #region 獲取驗(yàn)證碼
    public Stream getCodeStream(string codeUrl)
    {
      //驗(yàn)證碼請(qǐng)求
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(codeUrl);
      request.Method = "GET";
      request.ContentType = "application/x-www-form-urlencoded";
      request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1";
      request.Accept = "image/webp,*/*;q=0.8";
      request.CookieContainer = new CookieContainer();//!Very Important.!!!
      container = request.CookieContainer;
      var c = request.CookieContainer.GetCookies(request.RequestUri);
      HttpWebResponse response = (HttpWebResponse)request.GetResponse();
      response.Cookies = container.GetCookies(request.RequestUri);
     
     Stream stream = response.GetResponseStream();
     return stream;
    }
  }
    #endregion
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using HTTPHELPER;
namespace WindowsFormsApplication8
{
  public partial class ELONG_LOGIN_FORM : Form
  {
    public ELONG_LOGIN_FORM()
    {
      InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
      
      ELOGN_LOGIN elongLogin = new ELOGN_LOGIN();
      
      var rmsg = elongLogin.requestM(txtuserName.Text,txtPassword.Text,txtVaildata.Text);
      MessageBox.Show(rmsg);
    }
    private void ELONG_LOGIN_FORM_Load(object sender, EventArgs e)
    {
      ReflshPicImage();//更新驗(yàn)證碼
    }
    //更新驗(yàn)證碼
    public void ReflshPicImage()
    {
      string codeUrl = "https://secure.elong.com/passport/getValidateCode";
      ELOGN_LOGIN agent = new ELOGN_LOGIN();
      Stream stmImage = agent.getCodeStream(codeUrl);
      picValidate.Image = Image.FromStream(stmImage);
    }
    private void btnReValidate_Click(object sender, EventArgs e)
    {
      ReflshPicImage();//更新驗(yàn)證碼
    }
    private void picValidate_Click(object sender, EventArgs e)
    {
      ReflshPicImage();//更新驗(yàn)證碼
    }
  }
}
最后執(zhí)行效果,登錄的session已經(jīng)成功返回。
上一篇:C#如何通過(guò)RFC連接sap系統(tǒng)
欄 目:C#教程
下一篇:C# 中的EventHandler實(shí)例詳解
本文標(biāo)題:C#使用HttpWebRequest與HttpWebResponse模擬用戶(hù)登錄
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5780.html
您可能感興趣的文章
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的方法
 - 01-10C#實(shí)現(xiàn)實(shí)體類(lèi)與字符串互相轉(zhuǎn)換的方法
 - 01-10C#使用Dispose模式實(shí)現(xiàn)手動(dòng)對(duì)資源的釋放
 - 01-10C#3.0使用EventLog類(lèi)寫(xiě)Windows事件日志的方法
 - 01-10C#使用windows服務(wù)開(kāi)啟應(yīng)用程序的方法
 - 01-10c# ArrayList的使用方法小總結(jié)
 - 01-10C#使用ADO.Net部件來(lái)訪問(wèn)Access數(shù)據(jù)庫(kù)的方法
 - 01-10C#實(shí)現(xiàn)子窗體與父窗體通信方法實(shí)例總結(jié)
 - 01-10C#使用Mutex簡(jiǎn)單實(shí)現(xiàn)程序單實(shí)例運(yùn)行的方法
 - 01-10時(shí)間戳與時(shí)間相互轉(zhuǎn)換(php .net精確到毫秒)
 


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
 - 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
 - 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
 - 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
 - 5c語(yǔ)言計(jì)算三角形面積代碼
 - 6什么是 WSH(腳本宿主)的詳細(xì)解釋
 - 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
 - 8正則表達(dá)式匹配各種特殊字符
 - 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
 - 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
 
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
 - 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
 - 01-10WinForm限制窗體不能移到屏幕外的方法
 - 01-10WinForm繪制圓角的方法
 - 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
 - 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
 - 01-10C#停止線(xiàn)程的方法
 - 01-10C#實(shí)現(xiàn)清空回收站的方法
 - 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
 - 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
 
隨機(jī)閱讀
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
 - 04-02jquery與jsp,用jquery
 - 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
 - 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
 - 01-10C#中split用法實(shí)例總結(jié)
 - 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
 - 01-10delphi制作wav文件的方法
 - 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
 - 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
 - 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
 


