如何在 C# 中使用代理服务器?

11.04.2025

C# 中的代理服务器

 

代理服务器是用户与互联网之间的一种 “中介”。当然,这种工具也被所有编程语言的开发人员所使用。C# 中的代理服务器具有广泛的功能–它允许你隐藏真实 IP 地址、访问任何内容、在服务器之间分配负载等。

下面将简要介绍如何使用这种编程语言中的代理服务器。我们将向您传授基本知识–从基本设置到解决实际工作中出现的常见问题。

什么是代理服务器,为什么需要代理服务器?

代理服务器是一种计算机或程序,充当用户和互联网之间的中介。所有请求都通过代理发送。使用代理服务器的主要原因如下

  • 匿名–隐藏用户的真实 IP 地址。
  • 访问被封锁的资源–可以绕过地区限制。
  • 安全性–防止某些网络威胁。
  • 流量优化–缓存数据,加快页面加载速度。
  • 服务器之间的负载平衡。

代理服务器分为公共代理服务器和私人代理服务器。前者人人可用,后者需要授权。其中最好的是 LTE Socks 提供的移动代理。它们集匿名性、性能和稳定性于一身。事实上,您可以使用移动运营商的真实 IP 地址,这意味着在大多数网站上,您与普通移动互联网用户没有区别。

如何在 C# 中设置代理?

在 C# 中设置代理有两种方法–通过过时的 WebProxy 或更现代的 HttpClient。要开始使用,你需要准备好工作环境。

准备工作环境

确保你拥有所有需要的工具和库。使用 C# 进行代理服务器的基本工作需要:

  • .NET SDK 6.0+;
  • 开发环境(Visual Studio、VS Code);
  • System.Net 和 System.Net.Http 命名空间。

您还需要 HtmlAgilityPack 库进行解析。

通过 WebProxy 设置代理

如何在 C# 中通过 WebProxy 连接代理?使用代码,但请记住这是一种过时的方法–更现代的方法是使用 HttpClient:

var proxy = new WebProxy(“http://proxy:port”);

proxy.Credentials = new NetworkCredential(“username”, “password”);

var request = WebRequest.Create(“http://example.com”);

request.Proxy = proxy;

指定代理地址、授权数据并将代理应用于请求。

代理与 HttpClient 集成

如何在 C# 中设置代理

现代方法是通过 HttpClientHandler:

var handler = new HttpClientHandler

{

Proxy = new WebProxy(“http://proxy:port”)

{

Credentials = new NetworkCredential(“username”, “password”)

},

UseProxy = true

};

using var client = new HttpClient(handler);

在这里,我们使用代理参数配置一个请求处理程序,并将其传递给 HttpClient。

在不同任务中使用 C# 代理

C# 中的代理可用于各种场景,从简单的请求到复杂的网络搜索和 API 集成。让我们来看看一些最常见的任务和解决方法。

使用代理处理网络请求

通过 POST 发送 JSON 数据的示例:

// 配置 HttpClient c 代理

var data = new {

username = “test”,

email = “test@example.com”

};

var json = JsonSerializer.Serialize(data);

var content = new StringContent(json, Encoding.UTF8, “application/json”);

var response = await client.PostAsync(url, content);

该代码将对象序列化为 JSON,创建一个 StringContent 对象,通过 HttpClient 发送 POST,接收响应。

使用代理进行网络搜索

网络搜索是从网站中自动提取数据的过程。在实际工作中,你经常需要发送许多请求,这可能会导致你的 IP 地址被屏蔽。代理有助于解决这一问题。

代理轮换对于搜刮很重要:

// 使用代理轮换进行搜索的功能

async Task ScrapeWithProxy(string url, Proxy[] proxies) {

// 选择随机代理

var proxy = GetRandomProxy(proxies); 

// 定制客户端

var client = CreateHttpClient(proxy);

// 发送查询

var html = await client.GetStringAsync(url);

// 如果出现错误,则使用新的代理递归运行函数

}

我们在这段代码中要做的

  • 随机选择一个代理;
  • 创建一个 HttpClient;
  • 处理错误并使用新代理进行递归调用。

以下是完整的刮擦代码:

using System;

using System.Collections.Generic;

using System.Net;

using System.Net.Http;

using System.Threading.Tasks;

using HtmlAgilityPack;

public class ProxyRotator

{

private readonly List<string> _proxies;

private readonly Random _random = new Random();

public ProxyRotator(List<string> proxies)

{

_proxies = proxies;

}

public string GetRandomProxy()

{

int index = _random.Next(_proxies.Count);

return _proxies[index];

}

}

async Task<string> ScrapeWithProxyRotationAsync(string url, ProxyRotator rotator)

{

//获取随机代理

string proxyUrl = rotator.GetRandomProxy();

// 获取随机代理

var handler = new HttpClientHandler

{

Proxy = new WebProxy(proxyUrl),

UseProxy = true,

// 为代理连接添加超时

Proxy = { UseDefaultCredentials = false }

};

using var client = new HttpClient(handler)

{

Timeout = TimeSpan.FromSeconds(30) //设置总超时

};

try

{

// 模拟普通浏览器

client.DefaultRequestHeaders.Add(“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36”);

client.DefaultRequestHeaders.Add(“Accept-Language”, “ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7”);

//发送查询

var response = await client.GetAsync(url);

// 如果出现错误(如 403 Forbidden),请尝试使用另一个代理

if (!response.IsSuccessStatusCode)

{

Console.WriteLine($”代理 {proxyUrl} 返回状态 {response.StatusCode}. 让我们再试一次…”);

return await ScrapeWithProxyRotationAsync(url, rotator); // 使用新代理进行递归调用

string htmlContent = await response.Content.ReadAsStringAsync();

// 让我们用 HtmlAgilityPack 用于解析 HTML

var htmlDocument = new HtmlDocument();

htmlDocument.LoadHtml(htmlContent);

// 提取所有 h1 标题的示例

var h1Nodes = htmlDocument.DocumentNode.SelectNodes(“//h1”);

if (h1Nodes != null)

{

foreach (var node in h1Nodes)

{

Console.WriteLine($”标题: {node.InnerText.Trim()}”);

}

}

return htmlContent;

}

catch (HttpRequestException ex)

{

Console.WriteLine($“使用代理时出错 {proxyUrl}: {ex.Message}“);

return await ScrapeWithProxyRotationAsync(url, rotator); // 尝试使用不同的代理服务器

}

catch (TaskCanceledException)

{

Console.WriteLine($“代理超时 {proxyUrl}. 让我们再试一次…”);

return await ScrapeWithProxyRotationAsync(url, rotator);

}

}

为应用程序接口和服务连接代理服务器

 

在使用外部 API 和网络服务时,C# 中的代理服务器对于绕过请求限制、提供容错和地理分布非常有用。要使用 API,创建一个普通客户端是很方便的:

public class ApiClient {

private HttpClient _client;

public ApiClient(string proxy) {

// 使用代理启动客户端

}

public async Task<string> GetData(string url) {

return await _client.GetStringAsync(url);

}

}

// 利用率

var client = new ApiClient(proxy);

var data = await client.GetData(endpoint);

这样,我们就可以在不同的 API 请求中轻松地重复使用代理设置。

在使用 API 时,尤其是需要处理大量请求时,我们应该考虑使用 LTE Socks 提供的移动代理。它们能提供稳定的连接,并能轮换 IP 地址。这在与对请求数量有限制的 API 集成时非常重要。

在 C# 中使用代理服务器的优缺点

C# 中的代理用法

在 C# 中使用代理服务器有利有弊。前者包括网络的高度匿名性和安全性、访问被封锁资源的权限,以及在服务器之间分配负载以提高稳定性的能力。如果需要,还可以组织来自不同 IP 的并行请求–这种方法在网络搜索程序中非常有用。

另一方面,在 C# 中使用代理会使代码复杂化,并需要额外的设置。因此,代码开发和进一步支持的时间会大大增加。

在 C# 中使用代理时的常见错误及其解决方案

在 C# 中使用代理时,可能会遇到以下错误:

  • 身份验证问题 – 检查登录密码对。
  • HTTPS – 禁用证书验证。
  • 超时 – 添加请求超时。

如果出现 IP 屏蔽,在代码中应用代理轮换。

结论:如何在 C# 中有效使用代理服务器?

首先,要在 C# 中使用代理服务器,应选择可靠的供应商,如 LTE Socks。其次,即使是好工具也要不时更换–在代码中组织轮换。

在程序运行过程中,任何事情都有可能发生–写下 scraper 或其他应用程序将如何处理错误。专家建议使用异步调用–它能提高代码的稳定性。

在实际使用代理之前,应使用检查器对其进行测试。我们推荐使用在线代理检查器。此外,我们公司还提供可靠的 SIM 卡托管服务–如果您愿意,可以通过我们赚钱。

正确的代理配置将使您的 C# 应用程序更加稳定和安全。

閱讀下一篇

所有文章