AngleSharp 的加载器会把下载委托给已注册的请求器。使用 AngleSharp.Io 时,应显式附加一个能识别代理的 HttpClientRequester:

using AngleSharp;
using AngleSharp.Io.Network;

var handler = new System.Net.Http.HttpClientHandler
{
    UseProxy = true,
    Proxy = new System.Net.WebProxy(
        "http://proxy.example.net:8080")
};
var http = new System.Net.Http.HttpClient(handler);
http.DefaultRequestHeaders.UserAgent.ParseAdd("ExampleReader/1.0");

var configuration = Configuration.Default
    .With(new HttpClientRequester(http))
    .WithDefaultLoader();

var context = BrowsingContext.New(configuration);

将该上下文用于预期的 OpenAsync 导航。HTTP 代理列表中的端点可以为公共网络下载提供 WebProxy 地址。在此工作期间保持底层 HTTP 客户端存活,之后释放所拥有的资源。

WithRequesters 是另一种方式,它会注册 AngleSharp.Io 中可用的请求器。除非是有意选择,否则不要把它与多个手动配置的 HTTP 请求器组合使用。在一个请求器上配置的代理不会配置为请求所选的另一个实现。

http 上的自定义默认标头属于目标请求。描述请求体的标头值(包括 Content-Type)应与该请求匹配,而不是全局强制用于每次下载。

在 WithDefaultLoader 之前注册请求器,这样加载器就会使用预期的 HTTP 服务,而不是在不存在时添加其默认服务。

相关文章