Я потратил много времени на это и не смог найти никаких примеров в свете этих новых изменений в библиотеке CefSharp, поэтому я собрал кое-что, что работает. Я использовал кусочки, которые я нашел в Интернете, и соединил все это. Возможно, он не идеален, но я нигде не могу найти прямой ответ!
Определите класс, который реализует ResourceRequestHandler. Базовый класс имеет обязательную функцию OnBeforeResourceLoad. Я добавил строку userAgent в конструктор, чтобы увидеть, что она может быть передана из вызывающих функций.
public class ResourceRequestHandlerExt : ResourceRequestHandler
{
private string userAgent;
public ResourceRequestHandlerExt(string userAgent)
{
this.userAgent = userAgent;
}
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
var headers = request.Headers;
headers["User-Agent"] = userAgent;
request.Headers = headers;
return base.OnBeforeResourceLoad(chromiumWebBrowser, browser, frame, request, callback);
}
}
Определите класс, который реализует RequestHandler. Базовый класс имеет обязательную функцию GetResourceRequestHandler, которая позволяет использовать для передачи нашего пользовательского агента классу ResourceRequestHandlerExt.
public class RequestHandlerExt : RequestHandler
{
private string userAgent;
public RequestHandlerExt(string userAgent)
{
this.userAgent = userAgent;
}
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
if (!string.IsNullOrEmpty(userAgent)) return new ResourceRequestHandlerExt(userAgent);
else return base.GetResourceRequestHandler(chromiumWebBrowser, browser, frame, request, isNavigation, isDownload, requestInitiator, ref disableDefaultHandling);
}
}
При создании экземпляра объекта ChromiumWebBrowser вы устанавливаете RequestHandler в класс RequestHandlerExt, описанный выше, используя:
ChromiumWebBrowser browser = new ChromiumWebBrowser();
browser.RequestHandler = new RequestHandlerExt(userAgent);
- Указание пользовательского агента в CefSettings будет перезаписано, поэтому в этом случае его не нужно.
- Если вы не укажете пользовательский агент, заголовки не будут добавлены / изменены
- Пользовательский агент можно изменить для каждого браузера. Вызов загрузки (url).