You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中实现类似Node.js Axios带代理的HTTP客户端以规避Cloudflare检测?

在C#中复现Node.js Axios代理客户端的解决方案

Node.js代码里的核心配置包括:自定义User-Agent、开启HTTP Keep-Alive、通过代理发送请求。下面分别给出RestSharp和WebClient的对应实现,确保和Node.js客户端行为一致,避免触发Cloudflare检测。

一、使用RestSharp实现

RestSharp通过RestClientOptions和自定义消息处理器匹配Axios的配置:

using RestSharp;
using System.Net;

public static RestClient GetRestSharpClient(string proxyUrl = null)
{
    var options = new RestClientOptions
    {
        UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",
        ConfigureMessageHandler = handler =>
        {
            if (handler is HttpClientHandler httpClientHandler)
            {
                // 开启Keep-Alive,对应Axios的keepAlive: true
                httpClientHandler.KeepAlive = true;
                httpClientHandler.MaxConnectionsPerServer = 10;

                // 配置代理
                if (!string.IsNullOrEmpty(proxyUrl))
                {
                    var proxyUri = new Uri(proxyUrl);
                    httpClientHandler.Proxy = new WebProxy(proxyUri)
                    {
                        UseDefaultCredentials = false
                    };
                }
            }
            return handler;
        }
    };

    var client = new RestClient(options);
    // 添加全局Content-Type头
    client.AddDefaultHeader("Content-Type", "application/json");

    return client;
}

使用示例:

var client = GetRestSharpClient("http://your-proxy-ip:port");
var request = new RestRequest("https://target-url.com/api");
var response = await client.GetAsync(request);

二、使用WebClient实现

WebClient需要重写GetWebRequest方法来配置Keep-Alive和代理,同时设置请求头:

using System.Net;

public class ProxyWebClient : WebClient
{
    private readonly Uri _proxyUri;

    public ProxyWebClient(Uri proxyUri = null)
    {
        _proxyUri = proxyUri;
        // 设置全局请求头
        Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0");
        Headers.Add(HttpRequestHeader.ContentType, "application/json");
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        if (request != null)
        {
            // 开启Keep-Alive
            request.KeepAlive = true;
            request.ServicePoint.MaxIdleTime = 30000;

            // 配置代理
            if (_proxyUri != null)
            {
                request.Proxy = new WebProxy(_proxyUri)
                {
                    UseDefaultCredentials = false
                };
            }
        }
        return request;
    }
}

使用示例:

using (var client = new ProxyWebClient(new Uri("http://your-proxy-ip:port")))
{
    var response = client.DownloadString("https://target-url.com/api");
}

关键注意事项

  • 请求头一致性:Cloudflare会检查请求头完整性,除了User-Agent和Content-Type,可额外添加Accept: */*、Accept-Language: en-US,en;q=0.5等Axios默认请求头,进一步匹配浏览器行为。
  • 代理认证:如果代理需要账号密码,需在WebProxy中设置Credentials = new NetworkCredential("username", "password")。
  • SSL证书处理:若目标站点证书存在问题,RestSharp可通过ServerCertificateCustomValidationCallback跳过验证(不建议生产环境使用)。

内容的提问来源于stack exchange,提问作者Lawyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:42:41