chromium - send custom header info on initial page load c#

前端 未结 3 1900
闹比i
闹比i 2020-12-06 12:05

Or How to inject a custom header into the initial request to a site when new-ing up an instance of the ChromiumWebBrowser.

I\'m a noob with Chromium

3条回答
  •  一生所求
    2020-12-06 13:02

    You should create a class that implement IRequestHandler then set an instance of that class as RequestHandler in your browser object.

    With version 53, that class should look like:

    class ChromeBrowserRequestHandler: IRequestHandler
        {
            public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
            {
                return false;
            }
    
            public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
            {
                return false;
            }
    
            public bool OnBeforePluginLoad(IWebBrowser browser, string url, string policyUrl, WebPluginInfo info)
            {
                return false;
            }
    
            public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
            {
                var headers = request.Headers;
                headers["Custom-Header"] = "My Custom Header";
                request.Headers = headers;
    
                return CefReturnValue.Continue;
            }
    
            public bool OnCertificateError(IWebBrowser browser, CefErrorCode errorCode, string requestUrl)
            {
                return false;
            }
    
            public void OnPluginCrashed(IWebBrowser browser, string pluginPath)
            {
            }
    
            public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
            {
            }
    
            public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) 
            { 
                return null; 
            }
    
            public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) 
            {
                return false; 
            }
    
            public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) 
            {
                return false; 
            }
    
            public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath) 
            {
            }
    
            public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url) 
            {
                return false;
            }
    
            public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) 
            {
                return false;
            }
    
            public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser) 
            { 
            }
    
            public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
            { 
            }
    
            public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl) 
            { 
            }
    
            public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) 
            {
                return false;
            }
        }
    

    Then, while creating your browser object:

    ChromiumWebBrowser myBrowser = new ChromiumWebBrowser("whatever.com")
    {
        RequestHandler = new ChromeBrowserRequestHandler()
    };
    

    Note that the request handler must be set before loading the page. If you can't set the request handler during instanctiaction, you can still set it later a reload the page with myBrowser.Load("whatever.com") .

提交回复
热议问题