如何使用C#绕过Cloudflare

如何使用C#绕过Cloudflare

你能在 C# 中绕过 Cloudflare 吗?既然您在这里问这个问题,我们可以大胆猜测您已经尝试抓取受 Cloudflare 保护的网页,但没有成功

解决这一挑战的最佳方法是使用能够掩盖爬虫程序并将其通过 Cloudflare 机器人检测雷达的技术。在本文中,我们将向您展示如何绕过 C# Cloudflare。

什么是 Cloudflare

Cloudflare是一家提供帮助保护和加速网站的服务的公司。其数据中心网络充当网站的反向代理,因此当用户访问受保护的网站时,他们的请求在到达原始服务器之前会通过 Cloudflare 的网络进行路由。这使得 Cloudflare 能够提供 DDoS 防护、内容优化和 SSL/TLS 加密等服务。

在尝试在 C# 中不绕过 Cloudflare 抓取网页时,您可能会遇到一些机器人管理错误,包括:

  • 错误 1010。
  • 错误 1012。
  • 错误 1020。

它们后面是403 ForbiddenHTTP 响应状态代码。

Cloudflare 可以检测 C# 吗?

是的,Cloudflare 能够检测 C# 抓取工具并阻止它们。为了确认这一点,让我们使用基本代码来抓取Opensea

首先打开一个 Visual Studio 实例并创建一个控制台应用程序。然后执行以下代码:

WebClient wc = new WebClient(); 
var webStream = wc.OpenRead("https://opensea.io/category/art"); 
var webReader = new StreamReader(webStream); 
var content = webReader.ReadToEnd();

结果如下:

naive_does_not_work

输出显示请求已发送到https://opensea.io/category/art,Cloudflare 返回错误 403。那么如何绕过 C# Cloudflare 并轻松进行抓取呢?让我们开始吧。

如何在 C# 中绕过 Cloudflare

使用库在 C# 中绕过 Cloudflare 的方法有多种,我们将讨论我们发现使用上面使用的相同目标网站有效的方法,因为它使用 Cloudflare。我们的任务是从艺术类别中剔除 Opensea 的热门收藏品名称。

ZenRows

绕过 C# Cloudflare 最简单、最有效的方法是使用ZenRows,这是一种绕过 Cloudflare 和所有主要反机器人的网络抓取 API。

👍 优点:

  • 它很容易使用。
  • 无需安装。
  • 它与 C# 无缝集成。
  • 您可以抓取动态网页。

👎 缺点:

  • 这是一项付费服务​​,但提供免费试用,计划起价低至 49 美元/月。

如何使用 ZenRows 在 C# 中绕过 Cloudflare

要使用 ZenRows 绕过 C# Cloudflare,请首先创建一个免费帐户并访问请求生成器。然后,粘贴您的目标 URL 并选中高级代理和反机器人复选框。这将为您提供在我们的抓取工具中使用的 API 密钥和参数:

zenrows_proxy_dashboard

要从 C# 调用 ZenRows 的 API,请将以下ZenRowsCFBypass函数添加到Program.cs文件中:

public static async Task<string> ZenRowsCFBypass(string url) 
{ 
    var client = new HttpClient(); 
    var encodedURL = WebUtility.UrlEncode(url); 
    var apiKey = "YOUR_API_KEY_HERE"; 
 
    var parameters = "premium_proxy=true&antibot=true"; 
    var request = $"https://api.zenrows.com/v1/?apikey={apiKey}&url={encodedURL}&{parameters}"; 
    var result = await client.GetStringAsync(request); 
    return result; 
}

通过在方法中添加以下代码来运行脚本Main

var rawHTML = ZenRowsCFBypass("https://opensea.io/category/art").Result;

抓取工具将在rawHTML变量中获取受保护页面的整个 HTML,输出应如下所示:

output_proxy_sharp

恭喜您在 C# 中使用 ZenRows 成功绕过 Cloudflare!

完整的代码如下所示:

using System.Net; 
using System.Net.Http; 
 
public class ZenRowExample 
{ 
    public static void Main(string[] args) 
    { 
        var rawHTML = ZenRowsCFBypass("https://opensea.io/category/art").Result; 
    } 
 
    public static async Task<string> ZenRowsCFBypass(string url) 
    { 
        var client = new HttpClient(); 
        var encodedURL = WebUtility.UrlEncode(url); 
        var apiKey = "YOUR_ZENROWS_API_KEY"; 
        var parameters = "premium_proxy=true&antibot=true"; 
        var request = $"https://api.zenrows.com/v1/?apikey={apiKey}&url={encodedURL}&{parameters}"; 
        var result = await client.GetStringAsync(request); 
     
        return result; 
    } 
}

Puppeteer Sharp

Puppeteer Sharp是在 C# 中用于绕过 Cloudflare 的另一种方法。它是一个 NetStandard 2.0 库,最低平台版本是 .NET Framework 4.6.1 和 .NET Core 2.0。

👍 优点:

  • 它很容易使用。
  • 它可以抓取动态网页。

👎 缺点:

  • 它使用大量的内存和CPU资源。

如何使用 Puppeteer Sharp 在 C# 中绕过 Cloudflare

要使用 Puppeteer Sharp 在 C# 中绕过 Cloudflare,请在 Visual Studio 中创建一个新的控制台应用程序项目并将其命名为OpenSeaPupSharp. 然后,添加以下起始代码Program.cs

public class PupSharp 
{ 
    public static void Main(string[] args) 
    { 
        Console.WriteLine("Trending arts..."); 
    } 
}

下一步是从 获取库,这可以通过导航到Tools,然后导航到Nuget Package ManagerNuget来完成,如下所示。

package_manager

从 Nuget 包管理器中,安装 PuppeteerSharp 库。安装后,它将显示在项目的依赖项下:

Install-Package PuppeteerSharp -Version 8.0.0

现在,转到该Main方法并编写以下代码:

using PuppeteerSharp; 
 
public class PupSharp 
{ 
    public static void Main(string[] args) 
    { 
        CheckingHeadLessChrome().Wait(); 
    } 
 
    // Just to see PuppeteerSharp in action in an headless chrome settings 
    public static async Task CheckingHeadLessChrome() 
    { 
        string outputFile = "Shot.png"; 
        using var browserFetcher = new BrowserFetcher(); 
        await browserFetcher.DownloadAsync(); 
        var options = new LaunchOptions() 
        { 
            ExecutablePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe", 
            Headless = true, 
            SlowMo = 10 
        }; 
        await using var browser = await Puppeteer.LaunchAsync(options); 
        await using var page = await browser.NewPageAsync(); 
        await page.GoToAsync("https://opensea.io/category/art"); 
        var allContent = await page.GetContentAsync(); 
        await page.ScreenshotAsync(outputFile); 
    } 
}

它使用创建一个假浏览器browserFetcher。它通过 下载整个 HTML browserFetcher.DownloadAsync()SlowMo方法设置为 10。这会生成下面的屏幕截图:

blocked

Cloudflare 追上了我们!它检测到抓取工具并得出结论,该请求来自可能的恶意机器人,因为 Headless 标志设置为true。要解决此问题,请设置Headless = false并重新运行代码。

var options = new LaunchOptions() 
{ 
    ExecutablePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe", 
    Headless = false, 
    SlowMo = 10 
};

通过此更改,刮刀不会被阻止:

with_chrome

CloudProxySharp

CloudProxySharp是用于绕过 Cloudflare 保护的代理服务器。它的工作原理是使用很少的资源在空闲状态下等待用户请求,当某些请求到达时,它使用带有隐形插件的 Puppeteer 创建一个无头浏览器 (Chrome)。

👍 优点:

  • 便于使用。
  • 比其他一些库更快。

👎 缺点:

  • 它不稳定,因为它仍处于测试阶段。

如何使用 CloudProxySharp 在 C# 中绕过 Cloudflare

首先安装Nuget软件包,然后使用以下命令安装 CloudProxySharp:

Install-Package CloudProxySharp -Version 1.0.2

安装库后,创建函数CloudProxySharpCFBypass。它包装了从抓取的页面获取文本的功能。

public static Task<string> CloudProxySharpCFBypass(string url) 
{ 
    var handler = new ClearanceHandler("http://localhost:8191/") 
    { 
        //Make sure that the string literal is in single line else it won't work 
        UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", 
        MaxTimeout = 60000 
    }; 
 
    var client = new HttpClient(handler); 
    var content = client.GetStringAsync(url); 
    return content; 
}

该函数创建一个HttpClient伪造真实浏览器的浏览器。然后,该客户端用于从我们尝试抓取的网页中获取原始 HTML。通过设置属性HttpClient,将处理程序配置为等待最多 1 分钟MaxTimeout。下载原始 HTML 的过程是异步的。

您现在可以继续调用该函数:

public static void Main(string[] args) 
{ 
    var content = CloudProxySharpCFBypass("https://opensea.io/category/art").Result; 
}

现在你就拥有了!输出如下所示:

output_proxy_sharp

屏幕截图显示了捕获的原始 HTML 的调试视图。

结论

Cloudflare Bot Management 是 C# 网络抓取的难题之一,因为它可以检测并阻止抓取工具。本文讨论了三个 C# Cloudflare 绕过库。然而,当扩展和发出更多请求时,它们会变得不可靠。它可以轻松地与 C# 顺利集成,并且您可以获得免费的 API 密钥。

类似文章