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#索引(Index)和范围(Range)

    详解 C# 索引(Index)和范围(Range) 简介 C# 8.0 引入了一个新的功能,即索引和范围。 索引允许您通过使用[]操作符来访问元素的位置,而不是使用集合实例的元素本身。 而范围允许我们轻松地指定一个集合的范围,以便我们可以在此范围内迭代集合元素。如果您的工作与集合打交道,这些是您需要掌握的基本技能。 索引 索引是用于访问特定元素的整数。 索引…

    C# 2023年5月15日
    00
  • C#实现读取txt文件生成Word文档

    下面是”C#实现读取txt文件生成Word文档”的完整攻略: 1. 背景 在我们的开发过程中,经常需要将txt文本转化为Word文档,但Word文档是二进制格式的文档,不方便手动编辑,这时,我们可以通过C#程序来实现读取txt文件生成Word文档的操作。 2. 准备工作 安装Microsoft Office Word 16.0 Object Library …

    C# 2023年6月1日
    00
  • Unity实现简单的多人聊天工具

    Unity实现简单的多人聊天工具攻略 前置知识 在进行本教程实践之前,你需要掌握以下知识: 基本的Unity游戏开发知识 C#编程语言基础 网络编程基础知识 准备工作 在进行本教程实践之前,你需要准备以下工具: Unity引擎 Visual Studio编程工具 Photon Unity Network插件 Git版本控制工具 实现步骤 Step 1. 引入…

    C# 2023年6月3日
    00
  • C#实现小截屏软件功能

    C#实现小截屏软件功能攻略 1. 背景 随着互联网的迅速发展,屏幕截图作为一种非常实用的工具,广泛应用于各个行业。本文将从C#编程角度上介绍如何实现一个简单的小截屏软件。 2. 实现步骤 2.1 软件界面设计 首先,我们需要设计软件的界面。可以使用Windows Froms或WPF等GUI工具进行设计,本文以Windows Froms为例。具体实现步骤如下:…

    C# 2023年6月6日
    00
  • C# 中的List.Sort()–集合排序方法全面解析

    C#中的List.Sort()–集合排序方法全面解析 1. 概述 在C#开发中,List 是常见的一种集合类型,其提供了一个 Sort() 方法来实现对集合的排序。本篇文章主要介绍 List 中的 Sort() 方法的功能及相关使用技巧。 2. 功能说明 List 中的Sort()方法用于对集合进行排序。默认情况下,Sort()方法按照升序对集合进行排序,…

    C# 2023年5月15日
    00
  • C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    将C#实体对象序列化成Json并将字段的首字母小写有两种解决方法,一种是通过在类定义中使用DataMember属性,另一种是通过创建一个包含转换规则的自定义JsonConverter类。 1. 使用DataMember属性 我们可以在类定义中使用[DataContract]和[DataMember]特性,这样在序列化时会自动将所有被标记的属性转为小写。 us…

    C# 2023年5月31日
    00
  • .NET Core支持Cookie和JWT混合认证、授权的方法

    在.NET Core中,我们可以使用Cookie和JWT混合认证、授权的方法来实现更加灵活和安全的身份验证和授权。本攻略将深入探讨这种方法的实现,并提供两个示例说明。 1. 混合认证、授权的基本原理 混合认证、授权的基本原理是将Cookie和JWT结合使用。当用户登录时,我们将用户信息存储在Cookie中,并将JWT作为响应的一部分返回给客户端。客户端在后续…

    C# 2023年5月17日
    00
  • C#创建自定义控件及添加自定义属性和事件使用实例详解

    很高兴听到您对C#创建自定义控件及添加自定义属性和事件使用实例的详细讲解感兴趣。那么我来为您详细讲解一下。 创建自定义控件 C#允许我们通过继承Control类来创建自定义控件。以下是创建自定义控件的步骤: 新建一个类,并将其继承自Control类。 public class MyCustomControl : Control { // 自定义控件的实现代码…

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