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

如何在HtmlAgilityPack中使用代理?配置后无法生效求助

在HtmlAgilityPack中配置代理的正确姿势

HtmlAgilityPack本身并不负责发起网络请求,它只是用来解析HTML内容,所以要实现代理访问,关键是给发起请求的客户端(比如HttpWebRequest或HttpClient)配置代理,再把请求返回的内容交给HtmlDocument处理。下面给你两种可行的实现方案:

方案1:使用HttpWebRequest + WebProxy

这是比较传统的方式,适合需要精细控制请求头(包括你的RefURL/Referer)的场景:

var targetUrl = "你的目标URL";
var proxyAddress = "101.109.44.157:8080";
var refUrl = "你的Referer链接";

// 1. 创建代理实例
var proxy = new WebProxy(proxyAddress, true);
// 如果代理需要账号密码,加上这两句:
// proxy.Credentials = new NetworkCredential("用户名", "密码");

// 2. 创建HttpWebRequest并配置代理和请求头
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUrl);
request.Proxy = proxy;
request.Referer = refUrl; // 设置你的RefURL
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"; // 建议加个UserAgent模拟浏览器

// 3. 获取响应并加载到HtmlAgilityPack
HtmlDocument doc = new HtmlDocument();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
{
    doc.Load(stream);
}

// 接下来就可以正常解析doc了
var nodes = doc.DocumentNode.SelectNodes("//div[@class='target']");

方案2:使用HttpClient + HttpClientHandler(推荐,更现代)

HttpClient是.NET Core和.NET 5+推荐的HTTP客户端,配置代理也很方便:

var targetUrl = "你的目标URL";
var proxyAddress = "101.109.44.157:8080";
var refUrl = "你的Referer链接";

// 1. 配置代理Handler
var handler = new HttpClientHandler();
handler.Proxy = new WebProxy(proxyAddress);
handler.UseProxy = true;
// 代理需要认证的话:
// handler.Proxy.Credentials = new NetworkCredential("用户名", "密码");

// 2. 创建HttpClient并设置请求头
using (var httpClient = new HttpClient(handler))
{
    httpClient.DefaultRequestHeaders.Referrer = new Uri(refUrl);
    httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");

    // 3. 获取响应内容并加载到HtmlDocument
    var htmlContent = await httpClient.GetStringAsync(targetUrl);
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(htmlContent);

    // 解析操作
    var nodes = doc.DocumentNode.SelectNodes("//div[@class='target']");
}

常见问题排查(为什么之前没生效?)

  • 你可能直接用了HtmlDocument.Load(url)方法,这个方法内部默认使用不带代理的请求,所以不会生效,必须手动用带代理的客户端请求后再加载内容。
  • 代理地址格式是否正确?要确保是IP:端口的格式,没有多余的http://前缀。
  • 代理是否需要认证?如果是需要账号密码的代理,一定要在WebProxy里设置Credentials。
  • 目标网站是否检测到了代理?有些网站会拒绝匿名代理,建议加上真实的UserAgent和Referer头模拟正常浏览器请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:24