C#.NET实现网页自动登录的方法

下面我会详细讲解如何使用C#.NET实现网页自动登录的方法。

一、需要用到的工具和技术

  • HttpWebRequest类:C#中提供的Http请求发送类,用于请求Web页面并获取响应数据。
  • CookieContainer类:C#中提供的Cookie容器,用于管理发送和接收的Cookie信息。
  • HtmlAgilityPack类库:第三方类库,用于解析HTML文本,方便我们获取目标页面中的表单信息。

二、实现步骤

1. 获取目标站点的登录表单信息

首先,我们需要分析需要登录的网站的登录表单信息,包括表单的控件名称、控件类型、值等。

我们可以使用浏览器的F12开发者工具来分析目标站点的表单信息。在Network标签下,使用用户名和密码登录后,可以看到一条POST请求。点击进入该请求信息,再进入Headers标签,我们可以在Request Headers中查看到Form Data。

接下来, 我们可以使用HtmlAgilityPack类库来解析HTML代码,获取到目标站点的登录表单信息。示例代码如下:

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://www.example.com/login.aspx");
HtmlNode form = doc.DocumentNode.SelectSingleNode("//form[@action='/login.aspx']");
string actionUrl = form.Attributes["action"].Value;
string usernameField = form.SelectSingleNode("//input[@name='username']").Attributes["name"].Value;
string passwordField = form.SelectSingleNode("//input[@name='password']").Attributes["name"].Value;

2. 登录并保存Cookie信息

接下来,我们可以使用HttpWebRequest类来发送POST请求,并获取到登录后的Cookie信息。在发送请求时,需要设置请求头部信息,将用户名和密码等信息写入到请求参数中。示例代码如下:

string postData = string.Format("{0}={1}&{2}={3}", usernameField, "your_username", passwordField, "your_password");
byte[] data = Encoding.UTF8.GetBytes(postData);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.example.com" + actionUrl);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (Stream stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    CookieContainer cookieJar = new CookieContainer();
    cookieJar.Add(response.Cookies);

    // do something with the cookies here...
}

在此代码中,我们设置请求的Content-Type为"application/x-www-form-urlencoded",表示请求体的格式为key=value的形式,并将请求参数以字节数组的形式写入到请求流中。接下来,我们可以通过获取到的响应对象来获取到登录后的Cookie信息,并将它们保存在CookieContainer对象中方便后续使用。

3. 发送需要登录的页面请求

最后,我们可以使用保存的Cookie信息,发送需要登录的页面请求,以达到自动登录的目的。发送请求时,需要将CookieContainer对象传递到请求中。示例代码如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.example.com/profile.aspx");
request.Method = "GET";
request.CookieContainer = cookieJar;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    // do something with the response here...
}

现在,我们已经可以使用C#.NET实现网页自动登录的方法了。

三、示例说明

示例1:使用C#.NET自动登录GitHub

我们以GitHub为例,演示如何使用C#.NET自动登录。

首先,打开GitHub的登录页面,并使用F12开发者工具分析表单控件信息。可以发现,用户名和密码的输入框的name属性值分别为:login、password。

接下来,我们使用下面的代码实现自动登录:

string loginUrl = "https://github.com/login";
string homeUrl = "https://github.com/";
string username = "your_username";
string password = "your_password";

// 获取登录表单信息
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(loginUrl);
HtmlNode form = doc.DocumentNode.SelectSingleNode("//form[contains(@class, 'auth-form')]");

string authenticityToken = form.SelectSingleNode("//input[@name='authenticity_token']")
                            .Attributes["value"].Value;
string timestamp = form.SelectSingleNode("//input[@name='timestamp']")
                            .Attributes["value"].Value;
string timestampSecret = form.SelectSingleNode("//input[@name='timestamp_secret']")
                            .Attributes["value"].Value;
string loginField = form.SelectSingleNode("//input[@name='login']")
                            .Attributes["name"].Value;
string passwordField = form.SelectSingleNode("//input[@name='password']")
                            .Attributes["name"].Value;

// 构造登录POST请求
string postData =
  string.Format("authenticity_token={0}&timestamp={1}&timestamp_secret={2}&login={3}&password={4}",
                authenticityToken, timestamp, timestampSecret, username, password);

byte[] data = Encoding.UTF8.GetBytes(postData);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginUrl);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (Stream stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

// 发送登录请求
CookieContainer cookieJar = new CookieContainer();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    cookieJar.Add(response.Cookies);
}

// 发送需要登录的页面请求
request = (HttpWebRequest)WebRequest.Create(homeUrl);
request.Method = "GET";
request.CookieContainer = cookieJar;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    // Console.WriteLine(new StreamReader(response.GetResponseStream()).ReadToEnd());
    // do something with the response here...
}

示例2:使用C#.NET自动登录京东商城

我们以京东商城为例,演示如何使用C#.NET自动登录并获取订单数据。

与示例1相似,我们首先需要使用F12开发者工具分析京东商城登录页面,获取到用户名和密码输入框的name属性值。可以发现,它们的name属性值分别为:loginname和nloginpwd。

接下来,我们使用下面的代码自动登录京东商城,并获取到当前登录用户的订单数据:

string loginUrl = "https://passport.jd.com/new/login.aspx";
string orderUrl = "https://order.jd.com/center/list.action";
string username = "your_username";
string password = "your_password";

// 获取登录表单信息
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(loginUrl);
HtmlNode loginForm = doc.DocumentNode.SelectSingleNode("//form[@name='formlogin']");

string uuid = loginForm.SelectSingleNode("//input[@name='uuid']")
                    .Attributes["value"].Value;
string loginnameField = loginForm.SelectSingleNode("//input[@name='loginname']")
                           .Attributes["name"].Value;
string nloginpwdField = loginForm.SelectSingleNode("//input[@name='nloginpwd']")
                           .Attributes["name"].Value;

// 构造登录POST请求
string postData =
  string.Format("uuid={0}&loginname={1}&nloginpwd={2}&submit=%E7%99%BB%E5%BD%95",
                uuid, username, password);
byte[] data = Encoding.UTF8.GetBytes(postData);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginUrl);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (Stream stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

// 发送登录请求
CookieContainer cookieJar = new CookieContainer();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    cookieJar.Add(response.Cookies);
}

// 发送订单页面请求,获取订单数据
request = (HttpWebRequest)WebRequest.Create(orderUrl);
request.Method = "GET";
request.CookieContainer = cookieJar;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    // Console.WriteLine(new StreamReader(response.GetResponseStream()).ReadToEnd());
    // do something with the response here...
}

这样,我们就成功使用C#.NET实现了京东商城的自动登录,以及获取当前登录用户的订单数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#.NET实现网页自动登录的方法 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#中载入界面的常用方法

    下面是关于C#中载入界面的常用方法的完整攻略。 1. 常用的C#界面加载方法 1.1 使用BackgroundWorker控件 BackgroundWorker是在C#中实现多线程的一种方式。通过使用多线程,可以在加载大量数据或执行耗时操作的过程中,保持UI线程的响应性能够更好,同时在后台线程中完成工作。 下面是使用BackgroundWorker控件的示例…

    C# 2023年5月31日
    00
  • C# 脚本引擎CS-Script的使用

    C# 脚本引擎CS-Script的使用 什么是CS-Script? CS-Script是一个用于扩展C#应用程序的开源脚本引擎。它允许您在不编译代码的情况下运行C#脚本,这使得C#脚本可以用于快速手动测试代码、构建脚本和部署小型工具等场合。 安装CS-Script 您可以使用NuGet安装CS-Script。在Visual Studio的“NuGet包管理器…

    C# 2023年6月3日
    00
  • 基于Unity实现3D版2048游戏的示例代码

    让我为您详细讲解一下基于Unity实现3D版2048游戏的完整攻略。 1、什么是2048游戏? 2048游戏是一款益智类小游戏,由Gabriele Cirulli在2014年创建。游戏规则非常简单:玩家通过滑动棋子,让相同数字的棋子相加,最终得到数字2048的棋子即可胜利。该游戏适合所有年龄段的玩家,可以锻炼玩家的观察力和反应能力。 2、如何基于Unity实…

    C# 2023年6月3日
    00
  • C#使用HttpWebRequest重定向方法详解

    下面是“C#使用HttpWebRequest重定向方法详解”的完整攻略。 什么是HttpWebRequest重定向? 在HTTP协议里,重定向(Redirect)指可将用户浏览器重定向到另一个URL。 在应用程序中,我们通常使用HttpWebRequest类来获取Web资源。当我们发起HTTP请求时,有可能会遇到Web服务器返回的HTTP响应状态码为302的…

    C# 2023年5月31日
    00
  • C#生成唯一值的方法汇总

    生成GUID GUID是一种可以用于生成全球唯一标识符的算法,具有足够的随机性和唯一性。在C#中可以通过Guid.NewGuid()方法生成GUID。 Guid guid = Guid.NewGuid(); string uniqueId = guid.ToString(); 通过时间戳生成唯一值 根据当前时间计算其与一个固定日期之间的时间间隔的毫秒数,将其…

    C# 2023年6月1日
    00
  • C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】

    C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】 本文将介绍如何用C#实现一个文件操作封装类,包括文件的删除、移动、复制和重命名等操作。我们将在代码中使用System.IO命名空间中的方法,实现这些功能。 文件操作封装类实现思路 我们将实现一个名为FileHelper的文件操作封装类,该类包含以下方法: 删除文件 移动文件 复制文件 重命名文件 …

    C# 2023年6月8日
    00
  • ASP.NET Core使用EF查询数据

    下面是关于“ASP.NET Core使用EF查询数据”的完整攻略,分为以下几个部分: 环境配置 创建数据库 安装EF 使用EF查询数据 1. 环境配置 在使用ASP.NET Core开发前,需要进行环境配置,具体步骤如下: 安装Visual Studio 2017或更高版本 下载安装.NET Core SDK 安装ASP.NET Core模板 2. 创建数据…

    C# 2023年6月3日
    00
  • 详解C# WinForm如何优雅的处理异常

    详解C# WinForm如何优雅的处理异常 什么是异常? 在计算机编程中,异常(Exception)是指在程序运行时发生的某种不正常的情况,如:除数为零、空指针引用等,这会导致程序的正常执行受到影响。在C# WinForm开发中,处理异常是一项非常重要的操作,它很大程度上决定了程序的稳定性和易用性。 异常处理的选项 在C#中,我们有多种方法来处理异常。以下是…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部