C#版-浏览器中用CSDN会员账号登录,从浏览器拿到cookie信息,在解锁CSDN文章的页面输入要解锁的文章地址,如果是会员文章,提示可解锁,点解锁可下载解锁好的文章

17 篇文章 0 订阅
3 篇文章 0 订阅

哈哈,被骗进来了吧,老铁,这个玩意儿纯属脱裤子放屁,多此一举,浏览器就能打开的事情,没必要再拿文章地址再去解锁看内容,闲来没事研究学习下解析html内容,有兴趣的研究学习下

项目会涉及到以下几个核心部分:

  1. 文章抓取:通过 HTTP 请求抓取 CSDN 文章页面。
  2. 会员身份模拟:通过存储 CSDN 会员账号的 CookieToken 来访问会员专属文章。
  3. 解锁和下载功能:用户输入文章链接后,判断是否为会员文章,如果是会员文章,则可以解锁并下载。

目录

实现步骤

1. 项目结构

2. 后端代码(ASP.NET Core)

2.1 新建 ASP.NET Core Web API 项目

2.2 安装所需的 NuGet 包

2.3 创建 CsdnService 服务类

2.4 创建 API 控制器

2.5 配置服务和路由

3. 前端部分

4. 部署与运行

5. 注意事项


实现步骤

1. 项目结构

  • ASP.NET Core 后端:用于处理 HTTP 请求,抓取和解锁 CSDN 文章。
  • 前端页面:一个简单的vue页面,允许用户输入文章 URL 并提供解锁和下载功能。

2. 后端代码(ASP.NET Core)

2.1 新建 ASP.NET Core Web API 项目

首先,你需要创建一个 ASP.NET Core Web API 项目:

dotnet new webapi -n CsdnUnlocker
cd CsdnUnlocker
2.2 安装所需的 NuGet 包

你需要 HtmlAgilityPack 来处理 HTML 页面抓取:

dotnet add package HtmlAgilityPack --version 1.11.37
2.3 创建 CsdnService 服务类

Services 文件夹中创建 CsdnService.cs,该类负责处理与 CSDN 的交互。

using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;

namespace CsdnUnlocker.Services
{
    public class CsdnService
    {
        private static readonly HttpClient _httpClient = new HttpClient();

        // 你可以通过Cookie模拟登录,获取会员内容
        private readonly string CsdnMemberCookie = "YOUR_CSDN_MEMBER_COOKIE_HERE";

        public async Task<bool> IsMemberArticleAsync(string articleUrl)
        {
            var request = new HttpRequestMessage(HttpMethod.Get, articleUrl);
            request.Headers.Add("Cookie", CsdnMemberCookie);

            var response = await _httpClient.SendAsync(request);
            if (!response.IsSuccessStatusCode)
            {
                return false;
            }

            var content = await response.Content.ReadAsStringAsync();
            // 判断页面是否包含“会员专享”等字样
            return content.Contains("会员专享");
        }

        public async Task<string> UnlockArticleAsync(string articleUrl)
        {
            var request = new HttpRequestMessage(HttpMethod.Get, articleUrl);
            request.Headers.Add("Cookie", CsdnMemberCookie);

            var response = await _httpClient.SendAsync(request);
            if (!response.IsSuccessStatusCode)
            {
                return null;
            }

            var content = await response.Content.ReadAsStringAsync();
            var document = new HtmlDocument();
            document.LoadHtml(content);

            // 提取完整文章内容
            var articleNode = document.DocumentNode.SelectSingleNode("//div[@class='article-content']");
            if (articleNode != null)
            {
                return articleNode.InnerHtml;
            }

            return null;
        }
    }
}
2.4 创建 API 控制器

Controllers 文件夹中创建 CsdnController.cs,提供两个 API:

  1. 检查文章是否为会员文章。
  2. 解锁会员文章。
    using HtmlAgilityPack;
    
    namespace CsdnUnlocker
    {
        public class CsdnService
        {
            private static readonly HttpClient _httpClient = new HttpClient();
    
            // 你可以通过Cookie模拟登录,获取会员内容
            private readonly string CsdnMemberCookie = "802e77502c9c4e038bc2c32353be5ad1";
    
            public async Task<bool> IsMemberArticleAsync(string articleUrl)
            {
                var request = new HttpRequestMessage(HttpMethod.Get, articleUrl);
                request.Headers.Add("Cookie", CsdnMemberCookie);
    
                var response = await _httpClient.SendAsync(request);
                if (!response.IsSuccessStatusCode)
                {
                    return false;
                }
    
                var content = await response.Content.ReadAsStringAsync();
                // 判断页面是否包含“会员专享”等字样
                return content.Contains("会员专享");
            }
    
            public async Task<string> UnlockArticleAsync(string articleUrl)
            {
                var request = new HttpRequestMessage(HttpMethod.Get, articleUrl);
                request.Headers.Add("Cookie", CsdnMemberCookie);
    
                var response = await _httpClient.SendAsync(request);
                if (!response.IsSuccessStatusCode)
                {
                    return null;
                }
    
                var content = await response.Content.ReadAsStringAsync();
                var document = new HtmlDocument();
                document.LoadHtml(content);
    
                // 提取完整文章内容
                var articleNode = document.DocumentNode.SelectSingleNode("//div[@class='article-content']");
                if (articleNode != null)
                {
                    return articleNode.InnerHtml;
                }
    
                return null;
            }
        }
    }
    
    2.5 配置服务和路由

    Startup.csProgram.cs 中,添加对 CsdnService 的依赖注入,并确保启用了静态文件中间件,以便用户可以下载文章。

    using CsdnUnlocker;
    using Microsoft.Extensions.PlatformAbstractions;
    using Microsoft.OpenApi.Models;
    
    internal class Program
    {
        private static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
    
            // Add services to the container.
    
            builder.Services.AddControllers();
            builder.Services.AddScoped<CsdnService>();
            builder.Services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                var xmlPath = Path.Combine(basePath, "CsdnUnlocker.xml");
                c.IncludeXmlComments(xmlPath);
            });
    
    
            var app = builder.Build();
    
            // Configure the HTTP request pipeline.
            if (app.Environment.IsDevelopment())
            {
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"));
            }
            app.UseHttpsRedirection();
            app.UseAuthorization();
            app.UseStaticFiles();
            app.UseRouting();
            app.MapControllers();
            app.UseCors(builder => { builder.WithOrigins("http://localhost:8080").AllowAnyMethod().AllowAnyHeader(); });
            app.Run();
        }
    }

    3. 前端部分

    <template>
        <div>
            <el-input v-model="csdnUrl" placeholder="请输入CSDN文章URL"></el-input>
            <el-button type="primary" @click="checkArticle">检查文章</el-button>
            <div v-if="unlockable">
                <el-alert title="此文章为会员文章,可以解锁" type="info"></el-alert>
                <el-button type="success" @click="unlockArticle">解锁文章</el-button>
            </div>
            <div v-if="downloadUrl">
                <el-button type="primary" :href="downloadUrl" download>下载解锁后的文章</el-button>
            </div>
        </div>
    </template>
    
    
    <script>
    import axios from 'axios';
    export default {
        name: 'App',
        data() {
            return {
                csdnUrl: '',
                unlockable: false,
                downloadUrl: ''
            };
        },
        methods: {
            checkArticle() {
                axios.post('http://localhost:7294/api/Csdn/check',  { url: this.csdnUrl }, {
                    headers: {
                        'Content-Type': 'application/json' // 设置请求头为 JSON
                    }
                }).then(response => {
                    if (response.data.unlockable) {
                        this.unlockable = true;
                    } else {
                        this.$message.error('该文章无需解锁或无权限解锁');
                    }
                });
            },
            unlockArticle() {
                axios.post('http://localhost:7294/api/Csdn/unlock', { url: this.csdnUrl }).then(response => {
                    this.downloadUrl = response.data.downloadUrl;
                    this.$message.success('解锁成功,点击下载');
                });
            }
        }
    }
    </script>
    

    4. 部署与运行

                1.运行项目:在项目根目录下运行以下命令,启动 ASP.NET Core 应用。

dotnet run

                2.访问前端页面:打开浏览器,访问 https://localhost:5001,输入 CSDN 文章链接进行测试。

5. 注意事项

  • CSDN 会员凭证:需要确保你的 CSDN 会员账号的 Cookie 是最新且有效的,过期后需要更新。
  • 合法性与合规性:请遵守 CSDN 平台的服务条款及相关法律,确保不会滥用该功能,造成不必要的法律风险。
  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战族狼魂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值