CefSharp之三-如何获取request和response

我用的是CefSharp 47版本,其他版本会有些函数的改动。具体怎么开始使用CefSharp请看我的其他博客。

 

public partial class requesthandler : IRequestHandler
    {

        public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
        {
            throw new NotImplementedException();
        }

        public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
        {
            return false;
            //throw new NotImplementedException();
        }

        public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
            //throw new NotImplementedException();
            MessageBox.Show(request.Headers["User-Agent"]);//<span style="font-family: Arial, Helvetica, sans-serif;">这里弹出response</span>
            return CefReturnValue.Continue;  
        }

        public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
        {
            throw new NotImplementedException();
        }

        public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
        {
            throw new NotImplementedException();
        }

        public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
        {
            throw new NotImplementedException();
        }

        public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
        {
            throw new NotImplementedException();
        }

        public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
        {
            throw new NotImplementedException();
        }

        public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
        {
            throw new NotImplementedException();
        }

        public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
        {
            //throw new NotImplementedException();
        }

        public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
        {
            //throw new NotImplementedException();
        }

        public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl)
        {
            throw new NotImplementedException();
        }

        public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
        {
            //throw new NotImplementedException();
            MessageBox.Show(response.ResponseHeaders["Set-Cookie"]);//这里弹出response
            return false;
        }
    }

 

 

 

 

 

CefSharp 是一个基于 Chromium Embedded Framework (CEF) 的 .NET 控件库,用于在.NET 程序中嵌入浏览器功能。在使用CefSharp的过程中,获取静态资源是一项基本功能。 获取静态资源的方法是使用 CefSharpRequestContext 对象 ResourceHandler 类。首先,我们需要创建一个 RequestContext 对象,并使用它来创建 BrowserSettings,这样可以在加载资源时使用自定义的设置。然后,我们可以使用 RequestContext 的 GetResource方法来获取指定的静态资源。 假设我们需要获取一个 CSS 文件的内容,我们可以创建一个继承自 ResourceHandler 的类,重写其 ProcessRequest 方法,此方法会在浏览器加载静态资源时被调用。在 ProcessRequest 方法中,我们可以使用 CefSharp.Util.FileUtil 的 ReadAllBytes 方法来读取 CSS 文件的内容,并返回一个带有正确 MIME 类型的 Response。 可以通过以下代码实现获取 CSS 文件内容的功能: ```csharp class CustomResourceHandler : ResourceHandler { public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback) { if (request.Url.EndsWith(".css")) { string filePath = "path-to-your-css-file"; byte[] fileContent = FileUtil.ReadAllBytes(filePath); Stream = new MemoryStream(fileContent); StatusCode = (int)HttpStatusCode.OK; ResponseHeaders = new NameValueCollection() { { "Content-Type", "text/css" } }; callback.Continue(); return CefReturnValue.ContinueAsync; } return CefReturnValue.Continue; } } // 在获取静态资源前配置 RequestContext var requestContextSettings = new RequestContextSettings { CachePath = "path-to-request-context-cache" }; var requestContext = new RequestContext(requestContextSettings); // 设置 BrowserSettings,以自定义加载设置 var browserSettings = new BrowserSettings { RequestContextPerBrowser = false, WebSecurity = CefState.Disabled }; // 创建 ChromiumWebBrowser 并使用配置的 RequestContext BrowserSettings var chromiumBrowser = new ChromiumWebBrowser("https://your-website-url.com", browserSettings, requestContext); // 配置静态资源的处理器 var factory = new CefSharpSchemeHandlerFactory(); factory.RegisterHandler("https", "your-website-url.com", new CustomResourceHandler()); // 在 ChromiumWebBrowser 加载 URL 时使用自定义的 SchemeHandlerFactory var handler = webView.Browser.GetMainFrame().RequestContext.GetSchemeHandlerFactory().RegisterHandlerFactory("https", "your-website-url.com", factory); ``` 上述代码中,我们创建了一个 CustomResourceHandler 类来处理资源的获取,其中假设我们要获取的是以 .css 结尾的文件。然后,我们需要使用 RequestContext BrowserSettings 来配置静态资源的处理。最后,在 ChromiumWebBrowser 加载 URL 时使用自定义的 SchemeHandlerFactory。 通过上述方法,我们可以在 CefSharp 中方便地获取静态资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值