Как я могу использовать прокси?

Я новичок в англошарпе. Я пробовал изменить прокси в документации, но это не сработало. Теперь я использую это, он хорошо работает с веб-клиентом, но не работает с AngleSharp.

Код, который я пытаюсь:

            var handler = new HttpClientHandler()
            {
                Proxy = new WebProxy(String.Format("{0}:{1}", "myProxy", "myPort"), false),
                PreAuthenticate = true,
                UseDefaultCredentials = false,
            };
            var config = Configuration.Default.WithJs().WithCookies().WithDefaultLoader().With(handler);

            //Create a new context for evaluating webpages with the given config
            var context = BrowsingContext.New(config);     
            var document = await context.OpenAsync("https://api.ipify.org?format=json");
            Console.WriteLine(document.DocumentElement.OuterHtml);

Я не получаю никаких ошибок, прокси не работает, вот и все. Я получаю свой оригинальный IP, а не прокси. Но с WebClient это работает хорошо.


person mbpakalin    schedule 31.08.2019    source источник


Ответы (1)


Вы просто добавляете что-то (handler, то есть экземпляр HttpClientHandler) в конфигурацию AngleSharp — то, что не будет использоваться ничем в AngleSharp.

Прежде всего, внутренний HTTP-клиент AngleSharp является только клиентом по умолчанию. По соображениям совместимости AngleSharp не может поставляться с HttpClient вместо этого, если использует HttpWebRequest. Это также позволяет вам установить прокси.

Теперь, если вы хотите использовать свой код, я предлагаю вам использовать AngleSharp.Io (https://www.nuget.org/packages/AngleSharp.Io или https://github.com/AngleSharp/AngleSharp.Io). Это довольно просто и прямолинейно:

var handler = new HttpClientHandler
{
    Proxy = new WebProxy(String.Format("{0}:{1}", "myProxy", "myPort"), false),
    PreAuthenticate = true,
    UseDefaultCredentials = false,
};
var config = Configuration.Default
    .WithRequesters(handler)
    .WithDefaultLoader()
    .WithJs()
    .WithTemporaryCookies()
    .WithDefaultLoader();
var context = BrowsingContext.New(config);     
var document = await context.OpenAsync("https://api.ipify.org?format=json");
Console.WriteLine(document.DocumentElement.OuterHtml)

Добавлено только .WithRequesters(handler). Это добавляет запросчиков из AngleSharp.Io. Предоставляя handler, мы можем настроить HttpClient.

Надеюсь, это поможет!

person Florian Rappl    schedule 01.09.2019
comment
Спасибо, Флориан, это сработало отлично, и я уверен, что как-нибудь помогу вашему проекту :) - person mbpakalin; 03.09.2019