栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#使用HttpWebRequest与HttpWebResponse模拟用户登录

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#使用HttpWebRequest与HttpWebResponse模拟用户登录

模拟艺龙旅游网登录,供大家参考,具体内容如下

想模拟登录,首先整理一下流程

1.通过360浏览器(IE,火狐等等)F12开发人员工具抓到相关数据

2.获取验证码(拿到cookie),登录时也需要使用

3.登录

F12调出开发人员工具,输入用户名,密码登录,看我们抓到了什么信息。

Request URL:这个就是登录请求的url 
https://secure.elong.com/passport/ajax/elongLogin

方式POST
Form data:这个是我们要POST传输的数据:

userName=xzdylyh&passwd=12313&validateCode=验证码&rememberMe=false

其它一些重要信息在Request Headers中

*****************************************************************

我使用C# 设计的winform界面

复制代码

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; //存储验证码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;//获取验证码时候获取到的cookie会附加在这个容器里面
 request.KeepAlive = true;//建立持久性连接
 //整数据
 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;

 //发送数据 using结束代码段释放
 using (Stream requestStm = request.GetRequestStream())
 {
   requestStm.Write(bytepostData, 0, bytepostData.Length);
 }

 //响应
 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 获取验证码
    public Stream getCodeStream(string codeUrl)
    {

      //验证码请求
      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();//更新验证码
    }

    //更新验证码
    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();//更新验证码
    }

    private void picValidate_Click(object sender, EventArgs e)
    {
      ReflshPicImage();//更新验证码
    }
  }
}

最后执行效果,登录的session已经成功返回。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/123522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号