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 サービスを使えます。

関連記事