如何使用C#绕过Cloudflare
你能在 C# 中绕过 Cloudflare 吗?既然您在这里问这个问题,我们可以大胆猜测您已经尝试抓取受 Cloudflare 保护的网页,但没有成功。
解决这一挑战的最佳方法是使用能够掩盖爬虫程序并将其通过 Cloudflare 机器人检测雷达的技术。在本文中,我们将向您展示如何绕过 C# Cloudflare。
什么是 Cloudflare
Cloudflare是一家提供帮助保护和加速网站的服务的公司。其数据中心网络充当网站的反向代理,因此当用户访问受保护的网站时,他们的请求在到达原始服务器之前会通过 Cloudflare 的网络进行路由。这使得 Cloudflare 能够提供 DDoS 防护、内容优化和 SSL/TLS 加密等服务。
在尝试在 C# 中不绕过 Cloudflare 抓取网页时,您可能会遇到一些机器人管理错误,包括:
- 错误 1010。
- 错误 1012。
- 错误 1020。
它们后面是403 Forbidden
HTTP 响应状态代码。
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();
结果如下:
输出显示请求已发送到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 密钥和参数:
要从 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,输出应如下所示:
恭喜您在 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
来完成,如下所示。
从 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。这会生成下面的屏幕截图:
Cloudflare 追上了我们!它检测到抓取工具并得出结论,该请求来自可能的恶意机器人,因为 Headless 标志设置为true
。要解决此问题,请设置Headless = false
并重新运行代码。
var options = new LaunchOptions() { ExecutablePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe", Headless = false, SlowMo = 10 };
通过此更改,刮刀不会被阻止:
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; }
现在你就拥有了!输出如下所示:
屏幕截图显示了捕获的原始 HTML 的调试视图。
结论
Cloudflare Bot Management 是 C# 网络抓取的难题之一,因为它可以检测并阻止抓取工具。本文讨论了三个 C# Cloudflare 绕过库。然而,当扩展和发出更多请求时,它们会变得不可靠。它可以轻松地与 C# 顺利集成,并且您可以获得免费的 API 密钥。